Laravel5使用Passport密码授权单用户登录的方法

Laravel使用Passport密码授权时,默认同一个账号是可以同时在多个地方登录的,这样数据库中同一个账号会产生多个AccessTokenRefreshToken,现在我们要实现的就是当一个账号登录时,清除掉它之前在其他地方登录时生成的AccessTokenRefreshToken

Passport密码授权有两个事件,一个是AccessTokenCreated,一个是RefreshTokenCreated,这里我们监听第一个事件就可以了。

配置监听项

app/Providers/EventServiceProvider中增加监听项:

1
2
3
4
5
6
7
8
9
10
/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\Auth\RevokeOldTokens',
],
];

生成监听器

1
php artisan event:generate

增加监听代码

执行命令后目录App\Listeners\Auth\下会生成监听文件RevokeOldTokens.php,修改handle函数如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
* Handle the event.
*
* @param AccessTokenCreated $event
* @return void
*/
public function handle(AccessTokenCreated $event)
{
$tokenIdArr = Token::where('id', '!=', $event->tokenId)
->where('user_id', $event->userId)
->pluck('id')->toArray();
DB::table('oauth_refresh_tokens')->whereIn('access_token_id', $tokenIdArr)
->delete();
Token::where('id', '!=', $event->tokenId)
->where('user_id', $event->userId)
->delete();
}

至此,用户通过接口授权时,会自动清掉之前生成过的全部AccessTokenRefreshToken

本文作者:Jormin
本文地址https://blog.lerzen.com/2017/06/15/laravel5使用passport密码授权单用户登录的方法/
版权声明:本博客所有文章除特别声明外,均采用 CC BY-NC-SA 3.0 CN 许可协议。转载请注明出处!

----- 到这结束咯 感谢您的阅读 -----