首页 > 解决方案 > Laravel 护照阻止用户使用相同的凭据一起登录

问题描述

我正在使用 Laravel Passport 允许我的手机调用 laravel api 以使用 laravel 身份验证。

我最近发现了一个问题,即 laravel 护照允许同一用户从多个设备登录。我有什么解决方案可以防止同一用户同时使用其他设备登录吗?

我找到了一种使用 Laravel Passport 注销的方法,但我不知道如果我使用它是否是最好的方法

$request->user()->token()->revoke()

每当用户尝试登录时。

标签: phplaravellaravel-passport

解决方案


您可以挂钩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();
});

这将删除除刚刚创建的用户令牌之外的所有用户令牌。


推荐阅读