当我运行 $user->currentAccessToken()->delete();
命令时,token 过期了,Auth::check()
的返回值为 false
,这是预期的结果。
但是,当我查看 personal_access_tokens
表时,token 仍然存在。该表中没有软删除字段。Sanctum 是如何知道 token 已经过期的呢?
当我运行 $user->currentAccessToken()->delete();
命令时,token 过期了,Auth::check()
的返回值为 false
,这是预期的结果。
但是,当我查看 personal_access_tokens
表时,token 仍然存在。该表中没有软删除字段。Sanctum 是如何知道 token 已经过期的呢?
/*
|--------------------------------------------------------------------------
| 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' => 60 * 24 * 7,
我查看了 Sanctum 的源代码,似乎它是负责处理守卫的。
if (! $accessToken ||
($this->expiration &&
$accessToken->created_at->lte(now()->subMinutes($this->expiration))) ||
! $this->hasValidProvider($accessToken->tokenable)) {
return;
}
您可以通过使用HasApiTokens特性提供的令牌关系从数据库中删除令牌来“撤销”令牌:
$user->currentAccessToken()->delete();
时,它确实会撤销令牌,但它并没有从数据库中删除。我猜我的问题是,Sanctum 如何知道令牌已过期? - Inigo EC$user->currentAccessToken()->delete();
;数据库中没有类似于“expired_at”的东西。 - Inigo EC./config/santum.php
- PatricNoxuse Laravel\Sanctum\Sanctum;
Sanctum::$accessTokenAuthenticationCallback = function ($accessToken, $isValid){
return !$accessToken->last_used_at || $accessToken->last_used_at->gte(now()->subHours(72));
};
sanctum.php
文件中,你可以设置'expiration' => null,
。 - Kamlesh Paul