Аутентификация и авторизация являются ключевыми аспектами любого веб-приложения, обеспечивающими безопасность и контроль доступа к ресурсам. Laravel предлагает встроенные механизмы для этих задач, что значительно упрощает процесс их реализации. В этом руководстве мы рассмотрим, как настроить и использовать встроенные механизмы аутентификации и авторизации в Laravel.

1. Установка и настройка Laravel

Убедитесь, что у вас установлен Laravel и Composer. Создайте новый проект Laravel, если у вас его еще нет:

composer create-project --prefer-dist laravel/laravel auth-example

Перейдите в директорию проекта:

cd auth-example

2. Установка аутентификации

Laravel предлагает несколько способов аутентификации, включая Sanctum и Passport. В этом примере мы будем использовать Sanctum для аутентификации API.

Установите Sanctum через Composer:

composer require laravel/sanctum

Публикуйте конфигурацию Sanctum:

php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"

Запустите миграции для Sanctum:

php artisan migrate

3. Настройка модели User

Добавьте трейт Laravel\Sanctum\HasApiTokens в модель User:

use Laravel\Sanctum\HasApiTokens;

class User extends Authenticatable
{
    use HasApiTokens, Notifiable;
}

4. Настройка маршрутов

В routes/api.php добавьте маршруты для аутентификации:

use Illuminate\Support\Facades\Route;
use App\Http\Controllers\Auth\LoginController;
use App\Http\Controllers\Auth\RegisterController;

Route::post('/register', [RegisterController::class, 'register']);
Route::post('/login', [LoginController::class, 'login']);
Route::middleware('auth:sanctum')->group(function () {
    Route::post('/logout', [LoginController::class, 'logout']);
});

5. Создание контроллеров

Создайте контроллеры для регистрации и входа в систему:

php artisan make:controller Auth/LoginController
php artisan make:controller Auth/RegisterController

В LoginController добавьте методы для входа в систему и выхода:

use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;

class LoginController extends Controller
{
    public function login(Request $request)
    {
        $credentials = $request->only('email', 'password');

        if (!Auth::attempt($credentials)) {
            return response()->json(['message' => 'Invalid credentials'], 401);
        }

        $request->session()->regenerate();

        return response()->json(['message' => 'Logged in successfully']);
    }

    public function logout(Request $request)
    {
        Auth::logout();

        $request->session()->invalidate();
        $request->session()->regenerateToken();

        return response()->json(['message' => 'Logged out successfully']);
    }
}

В RegisterController добавьте метод для регистрации:

use Illuminate\Http\Request;
use App\Models\User;
use Illuminate\Support\Facades\Hash;

class RegisterController extends Controller
{
    public function register(Request $request)
    {
        $validatedData = $request->validate([
            'name' => 'required|max:255',
            'email' => 'required|email|max:255|unique:users',
            'password' => 'required|min:8|confirmed',
        ]);

        $user = User::create([
            'name' => $validatedData['name'],
            'email' => $validatedData['email'],
            'password' => Hash::make($validatedData['password']),
        ]);

        return response()->json(['message' => 'User registered successfully']);
    }
}

6. Тестирование аутентификации

Используйте инструменты, такие как Postman или Insomnia, для тестирования аутентификации. Вы можете зарегистрировать нового пользователя, войти в систему и выйти из нее, используя созданные маршруты.

7. Авторизация

Для авторизации вы можете использовать политики и гейты Laravel. Например, чтобы создать политику для модели Post, используйте команду:

php artisan make:policy PostPolicy --model=Post

В политике определите методы для проверки разрешений, например, view или update. Затем примените политику к маршрутам в routes/api.php:

Route::middleware('auth:sanctum')->group(function () {
    Route::get('/posts', [PostController::class, 'index'])->middleware('can:view,post');
});

Это базовое руководство по настройке и использованию встроенных механизмов аутентификации и авторизации в Laravel. Для более глубокого погружения в Laravel и Sanctum рекомендуется изучить официальную документацию.