В Laravel Passport, если требуется возвращать код ответа 403 при просроченном токене, следует использовать middleware. Middleware - это промежуточное ПО, которое обрабатывает запросы перед тем, как они достигнут вашего контроллера.
Для решения данной задачи необходимо создать свой middleware и зарегистрировать его в маршрутной таблице.
1. Создайте middleware с помощью команды artisan, выполнив следующую команду в терминале:
php artisan make:middleware CheckTokenExpiration
2. Откройте файл CheckTokenExpiration.php, который был только что создан в папке app/Http/Middleware, и замените его содержимое следующим кодом:
<?php namespace AppHttpMiddleware; use Closure; use CarbonCarbon; class CheckTokenExpiration { public function handle($request, Closure $next) { if ($request->user() && $request->user()->token()->expires_at < Carbon::now()) { return response()->json(['message' => 'Token expired'], 403); } return $next($request); } }
В этом коде мы проверяем, что у пользователя есть токен и что дата его истечения меньше текущей. Если условие выполняется, возвращаем ответ с сообщением "Token expired" и кодом ответа 403. В противном случае, пропускаем запрос через middleware и передаем его дальше.
3. Зарегистрируйте middleware в файле app/Http/Kernel.php, в массиве $routeMiddleware:
protected $routeMiddleware = [ // ... 'checkTokenExpiration' => AppHttpMiddlewareCheckTokenExpiration::class, ];
4. Теперь вам нужно применить middleware к маршруту или группе маршрутов, где вы хотите проверять просроченность токена. Это можно сделать, например, в файле routes/api.php:
Route::group(['middleware' => 'checkTokenExpiration'], function () { // Ваши защищенные маршруты });
Теперь, когда происходит запрос к защищенным маршрутам, middleware будет проверять, если токен истек или нет, и возвращать соответствующий код ответа.
Это сравнительно простой способ, чтобы возвращать код ответа 403 при просроченном токене в Laravel Passport. Помимо middleware, Laravel Passport также предоставляет другие возможности для настройки аутентификации и авторизации, и в зависимости от ваших требований, вы можете использовать их для решения данной задачи.