Laravel Sanctum (https://laravel.com/docs/9.x/sanctum) предоставляет простую систему аутентификации для SPA (одностраничных приложений), мобильных приложений и API на основе токенов. Sanctum позволяет каждому пользователю вашего приложения генерировать несколько токенов API для своей учетной записи. Токены определяют доступы пользователей к определенным методам.
Модуль Jetstream
включает в себя авторизацию с помощью Sunctum
. Если вы уже устанавливали Jetstream, то Sunctum устанавливать не надо.
Для включения функции api токен, необходимо раскомментировать соответствующую запись в опции конфигурации features в файле конфигурации config/jetstream.php
приложения:
'features' => [ Features::profilePhotos(), Features::api(), Features::teams(), ],
Каждый запрос, сделанный к приложению Jetstream, даже к аутентифицированным маршрутам в файле routes/web.php
, будет связан с объектом токена Sanctum
. И мы можем определить, имеет ли связанный токен данное разрешение, используя метод tokenCan
, предоставленный трейтом Laravel\Sanctum\HasApiTokens
.
Это свойство HasApiTokens
автоматически применяется к модели приложения App\Models\User
во время установки Jetstream
. Обычно метод tokenCan
вызывается в контроллерах приложения, компонентах Livewire или политиках авторизации.
Например, таким образом, мы можем создать токен для пользователя:
$user = User::first(); $user->create_token('developer_access')->plainTextToken;
Свойство plainTextToken
содержит созданный токен.
Использование токена в middleware:
Route::middleware('auth:sanctum')->get('/user', function (Request $request) { return $request->user(); });
Т.е. если мы сейчас переходя по ссылке /user
не передадим в запросе значение токена (свойство plainTextToken
), то будет ошибка доступа.
Удаление токенов пользователя:
$user->tokens()->delete();
Еще одна полезная возможность - это создание токена на определенные действия:
$user->createToken('token-name', ['category_list']);
Используем токен так:
if ($user->tokenCan('category_list')) { // }