Laravel Sanctum:如何配置令牌的到期日期?
Laravel Sanctum: How to configure the expiration date of the token?
背景和需求
在我的 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
中的一些代码,并且找到了 class Guard.php
.
class 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')
。此外,class SanctumServiceProvider
实例化 Guard
并将以下值传递给其构造函数:config('sanctum.expiration')
。但是我不知道 how/where 来定义这个配置值。也许 https://laravel.com/docs/8.x/configuration config(['sanctum.expiration' => '1277126']);
?你能确认一下吗? (但是这条线放在哪里?)
问题
我的问题是:在 Laravel 8 Sanctum 中,我如何为用于 Sanctum 令牌检查的变量 $expiration
设置我自己的值?我应该编辑配置文件吗?如果是,如何编辑?我应该在终端中输入配置命令吗?
文档 https://laravel.com/docs/8.x/sanctum#spa-configuration 说,对于 SPA,我们可以在文件 vendor/laravel/sanctum/config/sanctum.php
中为配置选项 SANCTUM_STATEFUL_DOMAINS
设置一个值。所以 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
所以后者应该可以毫无问题地进行编辑。我认为这是最好的解决方案。
您可以发布 Laravel 配置:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
见https://laravel.com/docs/8.x/sanctum#installation
之后您可以更改 config/santum.php
中的所有配置选项。 config
中的配置文件将覆盖 vendors
默认配置。
背景和需求
在我的 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
中的一些代码,并且找到了 class Guard.php
.
class 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')
。此外,class SanctumServiceProvider
实例化 Guard
并将以下值传递给其构造函数:config('sanctum.expiration')
。但是我不知道 how/where 来定义这个配置值。也许 https://laravel.com/docs/8.x/configuration config(['sanctum.expiration' => '1277126']);
?你能确认一下吗? (但是这条线放在哪里?)
问题
我的问题是:在 Laravel 8 Sanctum 中,我如何为用于 Sanctum 令牌检查的变量 $expiration
设置我自己的值?我应该编辑配置文件吗?如果是,如何编辑?我应该在终端中输入配置命令吗?
文档 https://laravel.com/docs/8.x/sanctum#spa-configuration 说,对于 SPA,我们可以在文件 vendor/laravel/sanctum/config/sanctum.php
中为配置选项 SANCTUM_STATEFUL_DOMAINS
设置一个值。所以 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
所以后者应该可以毫无问题地进行编辑。我认为这是最好的解决方案。
您可以发布 Laravel 配置:
php artisan vendor:publish --provider="Laravel\Sanctum\SanctumServiceProvider"
见https://laravel.com/docs/8.x/sanctum#installation
之后您可以更改 config/santum.php
中的所有配置选项。 config
中的配置文件将覆盖 vendors
默认配置。