3 回答
TA贡献1887条经验 获得超5个赞
您可以挂钩该AccessTokenCreated事件,然后在您的侦听器中您可以撤销任何现有的令牌。
将这些事件/侦听器添加到您的 EventServiceProvider
'Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\RevokeExistingTokens',
],
然后使用创建一个侦听器 php artisan make:listener RevokeExistingTokens
然后在handle函数内部:
$user = User::find($event->userId);
$user->tokens()->offset(1)->get()->map(function ($token) {
$token->revoke();
});
这将删除除刚刚创建的用户令牌之外的所有用户令牌。
TA贡献1830条经验 获得超3个赞
考虑到@Lucas Dalmarco 对@atymic 回答有关 MySQL“偏移”命令问题的评论。这是一个可以实施的变通解决方案。
$user = User::find($event->userId);
$user->tokens()->limit(PHP_INT_MAX)->offset(1)->get()->map(function ($token) {
$token->revoke();
});
TA贡献1852条经验 获得超1个赞
atymic 答案不仅正确,但在某些版本的 MySQL 中,“offset”方法可能有问题,因此您可以在“handle”函数中执行此操作:
Token::where('id', '!=', $event->tokenId)
->where('user_id', $event->userId)
->where('client_id', $event->clientId)
->delete();
- 3 回答
- 0 关注
- 155 浏览
添加回答
举报