Как возвращать 403 код ответа при просроченном токене Laravel Passport?

В 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 также предоставляет другие возможности для настройки аутентификации и авторизации, и в зависимости от ваших требований, вы можете использовать их для решения данной задачи.