Laravel Sanctum: как настроить срок действия токена?

Контекст и потребность

В моем файле маршрутов api я написал следующий код в соответствии с документацией (https://laravel.com/docs/8.x/sanctum#introduction):

Route::post('/tokens/create', function (Request $request) {
    $token = $request->user()->createToken($request->token_name);
    return ['token' => $token->plainTextToken];
});

Я хотел бы установить задержку истечения срока действия, которая будет использоваться для сравнения даты создания токена с датой текущей проверки срока действия токена: у токена будет дата создания x, текущая дата быть y, а задержка будет d, поэтому срок действия токена истекает, если y > x + d.

Что я наделал

Итак, я прочитал код в каталоге vendor/laravel/sanctum и нашел класс Guard.php.

Класс Guard.php содержит атрибут объекта с именем $expiration, конструктор, который его устанавливает (среди прочего), и метод __invoke, содержащий следующую проверку срока действия:

if (! $accessToken ||
                ($this->expiration &&
                 $accessToken->created_at->lte(now()->subMinutes($this->expiration))) ||
                ! $this->hasValidProvider($accessToken->tokenable)) {
                return;
            }

Как видите, он делает именно то, что я хочу. Однако я не могу понять, как установить собственное значение для атрибута $expiration.

В этом же файле есть некоторые намеки на существующий файл конфигурации, например этот: config('sanctum.guard', 'web'). Кроме того, класс SanctumServiceProvider создает экземпляр Guard и передает своему конструктору следующее значение: config('sanctum.expiration'). Но я не знаю, как/где определить это значение конфигурации. Возможно https://laravel.com/docs/8.x/configurationconfig(['sanctum.expiration' => '1277126']);? Не могли бы вы подтвердить это, пожалуйста? (но куда поставить эту строчку?)

Вопрос

Мой вопрос: в Laravel 8 Sanctum, как я могу установить собственное значение для переменной $expiration, используемой для проверки токенов Sanctum? Должен ли я редактировать файл конфигурации, и если да, то как? Должен ли я ввести команду конфигурации в терминале?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
4
0
11 638
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

В документации https://laravel.com/docs/8.x/sanctum#spa-configuration сказано, что для SPA мы можем установить значение параметра конфигурации SANCTUM_STATEFUL_DOMAINS в файле vendor/laravel/sanctum/config/sanctum.php. То же самое должно быть и для expiration. Этот файл действительно содержит следующий текст:

/*
|--------------------------------------------------------------------------
| Expiration Minutes
|--------------------------------------------------------------------------
|
| This value controls the number of minutes until an issued token will be
| considered expired. If this value is null, personal access tokens do
| not expire. This won't tweak the lifetime of first-party sessions.
|
*/

'expiration' => null,

Поэтому я думаю, что мне следует изменить его, чтобы установить количество минут истечения срока действия токенов.

Единственная проблема заключается в следующем: поскольку этот файл содержится в каталоге vendor, если я загружу обновление Sanctum, удалит ли оно эту модификацию (то есть: количество минут истечения срока действия, которое я написал)? Если да, то мне следует искать аналогичное решение, которое было бы постоянным (переопределение этого файла конфигурации? изменение файла .env?). Если нет, то нет никаких проблем, это было бы идеально.

Возможно https://laravel.com/docs/8.x/configuration#accessing-configuration-values ​​ было бы интересно узнать, какое решение принять. Однако, если бы кто-нибудь мог посоветовать мне в комментарии, это было бы любезно.


Окончательное решение

Важное редактирование: вместо vendor/laravel/sanctum/config/sanctum.php есть также следующий файл конфигурации: <my_site>/laravel/sanctum/config/sanctum.php, поэтому последний должен быть доступен для редактирования без каких-либо проблем. Я думаю, что это лучшее решение.

Вы никогда не должны редактировать что-либо под vendor. Просто опубликуйте файл конфигурации и измените его в config/sanctum.php. См. Поставщик php artisan:publish --provider = "Laravel\Sanctum\SanctumServiceProvider"

Nortol 15.08.2021 07:44

Я отклонил ваш ответ, потому что он неправильный, и есть риск оставить его как решение. В вашем обновлении (окончательном решении) у вас есть несуществующий путь. должно быть config/sanctumphp, а не <my_site>/laravel/sanctum/config/sanctum.php. Редактирование файлов в vendor — это то, чем вы даже не должны заниматься! vendor файлы устанавливаются и управляются композитором. Каждое обновление перезапишет ваши изменения. Поэтому я проголосовал за него и думаю, что вам следует удалить решение из своего ответа. Кстати. vendor файлы должны игнорироваться вашим scm.

Nortol 18.08.2021 10:33
Ответ принят как подходящий

Вы можете опубликовать конфигурацию Laravel:

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

Смотрите https://laravel.com/docs/8.x/sanctum#installation

После этого вы сможете изменить все параметры конфигурации в config/sanctum.php. Файлы конфигурации в config перезапишут конфигурацию vendor по умолчанию.

Другие вопросы по теме