Как сделать SPA-аутентификацию sanctum?

SPA-аутентификация с помощью Laravel Sanctum – это процесс аутентификации для приложений на основе одностраничной архитектуры (SPA), использующих Laravel Sanctum как механизм аутентификации.

Laravel Sanctum – это библиотека аутентификации, разработанная для Laravel фреймворка, которая предоставляет надежный и безопасный способ аутентификации пользователей в SPA-приложениях. Она использует механизм токенов для аутентификации пользователей на сервере и обеспечивает безопасность передачи данных между клиентом и сервером.

Чтобы настроить SPA-аутентификацию с помощью Sanctum, необходимо выполнить следующие шаги:

Шаг 1: Установка Sanctum
Сначала установите Laravel Sanctum, запустив следующую команду в корневой папке вашего проекта:

composer require laravel/sanctum

Шаг 2: Настройка Sanctum
После установки Sanctum, добавьте провайдера сервиса и сконфигурируйте пакет в файле config/app.php:

'providers' => [
    // ...
    LaravelSanctumSanctumServiceProvider::class,
],

'aliases' => [
    // ...
    'Sanctum' => LaravelSanctumSanctum::class,
]

Затем запустите следующую команду для публикации конфигурационного файла Sanctum:

php artisan vendor:publish --provider="LaravelSanctumSanctumServiceProvider"

После этого в файле config/sanctum.php вы можете настроить Sanctum, установив параметры, соответствующие вашему проекту.

Шаг 3: Миграции базы данных
Laravel Sanctum использует миграции для создания необходимых таблиц в базе данных. Запустите следующую команду для выполнения миграций:

php artisan migrate

Шаг 4: Определение аутентифицируемой модели
Установите модель для аутентификации, добавив следующую строку в файле config/auth.php:

'guard' => [
    // ...
    'sanctum' => [
        'driver' => 'sanctum',
        'provider' => 'users',
    ],
],

Шаг 5: Создание токена
Чтобы создать токен Sanctum для аутентифицированного пользователя в вашем SPA-приложении, выполните следующий код на сервере:

use IlluminateSupportFacadesHash;

Route::post('/login', function (Request $request) {
    $user = User::where('email', $request->email)->first();

    if (! $user || ! Hash::check($request->password, $user->password)) {
        return response()->json(['message' => 'Invalid credentials'], 401);
    }

    $token = $user->createToken('SPA Token')->plainTextToken;

    return response()->json(['token' => $token]);
});

Этот метод проверяет учетные данные пользователя и создает токен Sanctum. Затем он отправляет ответ с токеном в формате JSON.

Шаг 6: Использование токена для аутентификации
После создания токена Sanctum в вашем SPA-приложении вы можете использовать его для аутентификации запросов API. Для этого добавьте заголовок Authorization с значением Bearer {token} к запросам API.

Пример использования токена Sanctum для запроса к защищенному маршруту:

axios.get('/api/protected-route', {
    headers: {
        'Authorization': `Bearer ${token}`
    }
});

При обработке таких запросов Laravel будет автоматически аутентифицировать пользователя и предоставлять доступ к защищенному маршруту.

Это шаги, необходимые для настройки SPA-аутентификации с помощью Laravel Sanctum. После выполнения этих шагов ваше SPA-приложение будет взаимодействовать с Laravel API с помощью безопасного и надежного механизма аутентификации.