3 回答

TA貢獻(xiàn)1887條經(jīng)驗(yàn) 獲得超5個(gè)贊
您可以掛鉤該AccessTokenCreated事件,然后在您的偵聽(tīng)器中您可以撤銷任何現(xiàn)有的令牌。
將這些事件/偵聽(tīng)器添加到您的 EventServiceProvider
'Laravel\Passport\Events\AccessTokenCreated' => [
'App\Listeners\RevokeExistingTokens',
],
然后使用創(chuàng)建一個(gè)偵聽(tīng)器 php artisan make:listener RevokeExistingTokens
然后在handle函數(shù)內(nèi)部:
$user = User::find($event->userId);
$user->tokens()->offset(1)->get()->map(function ($token) {
$token->revoke();
});
這將刪除除剛剛創(chuàng)建的用戶令牌之外的所有用戶令牌。

TA貢獻(xiàn)1830條經(jīng)驗(yàn) 獲得超3個(gè)贊
考慮到@Lucas Dalmarco 對(duì)@atymic 回答有關(guān) MySQL“偏移”命令問(wèn)題的評(píng)論。這是一個(gè)可以實(shí)施的變通解決方案。
$user = User::find($event->userId);
$user->tokens()->limit(PHP_INT_MAX)->offset(1)->get()->map(function ($token) {
$token->revoke();
});

TA貢獻(xiàn)1852條經(jīng)驗(yàn) 獲得超1個(gè)贊
atymic 答案不僅正確,但在某些版本的 MySQL 中,“offset”方法可能有問(wèn)題,因此您可以在“handle”函數(shù)中執(zhí)行此操作:
Token::where('id', '!=', $event->tokenId)
->where('user_id', $event->userId)
->where('client_id', $event->clientId)
->delete();
- 3 回答
- 0 關(guān)注
- 183 瀏覽
添加回答
舉報(bào)