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

Posted

技术标签:

【中文标题】Laravel 8 tymon/jwt-auth 使另一个用户的令牌无效【英文标题】:Laravel 8 tymon/jwt-auth invalidate token to another user 【发布时间】:2021-09-08 00:50:09 【问题描述】:

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

    作为“管理员”用户,我可以删除其他用户的客户端。 在数据库中,实体永远不会被完全删除;我使用状态属性“活动”|“已删除”来软删除实体。 删除用户后,如果用户有令牌,我需要使令牌失效。

问题出在最后一点,我可以获取已删除的用户令牌,但在 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 guard 他们需要检查用户是否有 status = 'deleted'?

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

以上是关于Laravel 8 tymon/jwt-auth 使另一个用户的令牌无效的主要内容,如果未能解决你的问题,请参考以下文章

PHP Laravel 5.7 Tymon/jwt-auth 未安装

tymon/jwt-auth Laravel:无法验证令牌签名

laravel composer install 无法解决 tymon/jwt-auth 的可安装包

(API) Laravel 7 上不允许使用 tymon/jwt-auth 的 405 方法

在安装 tymon/jwt-auth 后的 laravel Backend REST API 应用程序中再次遇到 CORS 错误

Composer 无法安装 tymon/jwt-auth