如何使 Laravel Passport 中用户的所有令牌失效?

问题描述 投票:0回答:3

在我们的应用程序中,当用户注销时,我们会通过这种方式使该特定设备的访问令牌失效。

$user = $request->user();

$value = $request->bearerToken();
$id = (new Parser())->parse($value)->getHeader('jti');
$token = $user->tokens->find($id);
$token->revoke();

但是当用户停用他/她的帐户时,我们希望使用户登录的所有设备的所有访问令牌失效。 我浏览了该文档但没有发现任何有用的内容。谢谢

php laravel laravel-passport
3个回答
70
投票

查看护照提供的

HasApiTokens
特征。 文档建议将此特征添加到您的用户模型中。它提供的方法之一是
tokens()
,它定义了
hasMany
与使用该特征的模型之间的
Laravel\Passport\Token
关系。您可以使用它来检索给定用户的所有令牌的列表:

$userTokens = $userInstance->tokens;

代币模型本身有一个

revoke
方法:

foreach($userTokens as $token) {
    $token->revoke();   
}

2
投票

这对我有用:

use Laravel\Passport\Token;

 Token::where('user_id', $user->id)
                ->update(['revoked' => true]);

0
投票

这个答案对我不起作用,方法

revoke()
不存在。

if ($userInstance->tokens->count()) {
        foreach($userInstance->tokens as $token) {
            $token->delete();
        }
    }

上面的代码对我来说工作得很好

© www.soinside.com 2019 - 2024. All rights reserved.