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 错误