【问题标题】:How to invalidate all tokens for an user in laravel passport?如何使laravel护照中用户的所有令牌无效?
【发布时间】:2021-09-21 22:26:45
【问题描述】:

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

$user = $request->user();

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

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

【问题讨论】:

    标签: php laravel laravel-passport


    【解决方案1】:

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

    $userTokens = $userInstance->tokens;
    

    token 模型本身有一个revoke 方法:

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

    【讨论】:

    • 我们在 oauth_access_tokens 表中手动将用户 ID 的 revoke 字段设置为 1。但这似乎更好
    • 我手动撤消了用户之前的所有令牌,但“oauth_refresh_tokens”表中仍有已撤消“0”值的条目。然而,“oauth_access_tokens”表被更新为“1”以撤销。你能帮我解决这种情况还是我不需要担心这个?
    • 感谢它对我来说就像魅力一样。你是个超级骗子。
    【解决方案2】:

    这对我有用:

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

    【讨论】:

      猜你喜欢
      • 2020-03-14
      • 1970-01-01
      • 2019-04-17
      • 2017-06-10
      • 2018-08-04
      • 2019-05-15
      • 2020-01-14
      • 2021-05-03
      • 2021-12-03
      相关资源
      最近更新 更多