如何解决Laravel 8 tymon/jwt-auth 使另一个用户的令牌无效
我有一个使用 tymon/jwt-auth 包的 Laravel 8 API 项目,我正在尝试执行以下操作。
- 作为用户“管理员”,我可以删除其他用户的客户端。
- 在数据库中,实体永远不会被完全删除;我使用状态属性 'active'|'deleted' 软删除实体。
- 删除用户后,如果用户有令牌,我需要使令牌无效。
问题出现在最后一点,我可以获得已删除的用户令牌,但我找不到如何在 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 举报,一经查实,本站将立刻删除。