微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Laravel 8 tymon/jwt-auth 使另一个用户的令牌无效

如何解决Laravel 8 tymon/jwt-auth 使另一个用户的令牌无效

我有一个使用 tymon/jwt-auth 包的 Laravel 8 API 项目,我正在尝试执行以下操作。

  1. 作为用户管理员”,我可以删除其他用户的客户端。
  2. 数据库中,实体永远不会被完全删除;我使用状态属性 'active'|'deleted' 软删除实体。
  3. 删除用户后,如果用户有令牌,我需要使令牌无效。

问题出现在最后一点,我可以获得已删除用户令牌,但我找不到如何在 JWT docs 中使该特定令牌无效。我也找不到这样的问题。

public function delete($id)
{
    $parameters = ['id' => $id,'status' => 'deleted'];
    $user = request()->user();

    $data = User::where('id','<>',$user->id)->where('status','active')
        ->where('id',$parameters['id'])->first();
    if (!isset($data)) {
        return response()->json(['error' => 'User does not exist'],400);
    }

    $data->fill($parameters)->save();
    $token = auth()->tokenById($data->id);

    if ($token) {
        // Todo invalidate deleted user token
        // The next line invalidates the current auth token,not the target
        // user token auth()->invalidate($token);
    }

    return response()->json(['message' => 'Success'],200);
}

如果我从数据库中正确删除用户,使用他的令牌的下一个请求现在无效,因为用户不再存在。所以有一种方法可以告诉 tymon/jwt-auth 或 auth 守卫他们需要检查用户是否有 status = 'deleted'?

解决方法

您可以使中间件的令牌无效。

if ($user->blocked) {
      $token = $request->bearerToken();
      \Illuminate\Support\Facades\Auth::setToken($token)->invalidate();
      throw new UnauthorizedException();
 }

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。