如何使laravel护照中用户的所有令牌无效?

2022-08-30 13:54:46

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

$user = $request->user();

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

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


答案 1

看看护照提供的HasApiTokens特征。文档建议将此特征添加到用户模型中。它提供的方法之一是 ,它定义了 和使用该特征的模型之间的关系。您可以使用它来检索给定用户的所有令牌的列表:tokens()hasManyLaravel\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]);

推荐