Dav*_*ise 6 php laravel laravel-passport
我使用 Laravel Passport 允许我的手机调用 laravel api 以使用 laravel 身份验证。
我最近发现了一个问题,laravel 护照允许同一个用户从多个设备登录。有什么解决方案可以防止同一用户同时登录其他设备吗?
我找到了一种使用 Laravel Passport 注销的方法,但如果我使用,我不知道这是否是最好的方法
$request->user()->token()->revoke()
Run Code Online (Sandbox Code Playgroud)
每当用户尝试登录时。
aty*_*mic 10
您可以挂钩该AccessTokenCreated事件,然后在您的侦听器中您可以撤销任何现有的令牌。
将这些事件/侦听器添加到您的 EventServiceProvider
'Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\RevokeExistingTokens',
],
Run Code Online (Sandbox Code Playgroud)
然后使用创建一个侦听器 php artisan make:listener RevokeExistingTokens
然后在handle函数内部:
$user = User::find($event->userId);
$user->tokens()->offset(1)->get()->map(function ($token) {
$token->revoke();
});
Run Code Online (Sandbox Code Playgroud)
这将删除除刚刚创建的用户令牌之外的所有用户令牌。
小智 6
考虑到@Lucas Dalmarco 对@atymic 回答有关 MySQL“偏移”命令问题的评论。这是一个可以实施的变通解决方案。
$user = User::find($event->userId);
$user->tokens()->limit(PHP_INT_MAX)->offset(1)->get()->map(function ($token) {
$token->revoke();
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3540 次 |
| 最近记录: |