В моем файле маршрутов 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? Должен ли я редактировать файл конфигурации, и если да, то как? Должен ли я ввести команду конфигурации в терминале?






В документации 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, поэтому последний должен быть доступен для редактирования без каких-либо проблем. Я думаю, что это лучшее решение.
Я отклонил ваш ответ, потому что он неправильный, и есть риск оставить его как решение. В вашем обновлении (окончательном решении) у вас есть несуществующий путь. должно быть config/sanctumphp, а не <my_site>/laravel/sanctum/config/sanctum.php. Редактирование файлов в vendor — это то, чем вы даже не должны заниматься! vendor файлы устанавливаются и управляются композитором. Каждое обновление перезапишет ваши изменения. Поэтому я проголосовал за него и думаю, что вам следует удалить решение из своего ответа. Кстати. vendor файлы должны игнорироваться вашим scm.
Вы можете опубликовать конфигурацию Laravel:
php artisan vendor:publish --provider = "Laravel\Sanctum\SanctumServiceProvider"
Смотрите https://laravel.com/docs/8.x/sanctum#installation
После этого вы сможете изменить все параметры конфигурации в config/sanctum.php. Файлы конфигурации в config перезапишут конфигурацию vendor по умолчанию.
Вы никогда не должны редактировать что-либо под
vendor. Просто опубликуйте файл конфигурации и измените его вconfig/sanctum.php. См. Поставщик php artisan:publish --provider = "Laravel\Sanctum\SanctumServiceProvider"