【问题标题】:Laravel JWT Token Always BlacklistedLaravel JWT 令牌总是被列入黑名单
【发布时间】:2021-01-06 01:03:31
【问题描述】:

我正在为我的应用程序使用 tymondesigns/jwt-auth 包。我使用 customClaims 来制作我的令牌。 这是登录代码:

$token_data = [
        'iss' => new Issuer('AreteHCM'),
        'iat' => new IssuedAt(Carbon::now()) ,
        'exp' => new Expiration(Carbon::now()->addDays(1)),
        'nbf' => new NotBefore(Carbon::now()),
        'sub' => new Subject('AreteHCMS'),
        'jti' => new JwtId('AreteHCM'),
        'user_data' => $user->user,
        'menu_access' => $menu_access,
        'login_time' => Carbon::now(),
];
    
$customClaims = JWTFactory::customClaims($token_data);
$payload = JWTFactory::make($customClaims);
$token = JWTAuth::encode($payload)->get();

对于注销,我使令牌无效,因此用户注销后令牌不能再使用。

JWTAuth::invalidate(JWTAuth::getToken());

我正在使用 Angular 创建 API(后端)和前端团队。一切顺利,直到用户注销并尝试再次登录。登录后,用户获得了新账号,但是当他/她想访问我的中间件时总是拒绝令牌,它说令牌被列入黑名单。

这是我的中间件:

$token = JWTAuth::getToken();
$data = JWTAuth::getPayload($token)->toArray();

它总是显示错误:

The token has been blacklisted in file C:\xampp\htdocs\aretehcm\vendor\tymon\jwt-auth\src\Manager.php on line 109

我想接近的是:

  • 用户登录获取新token来访问API(每个API请求都需要header auth Bearer token)
  • 用户注销将使令牌失效,因此无法再使用令牌访问 API
  • 用户登录将获得一个新令牌,以便他/她可以访问 API

我对 JWT-API 架构有什么误解吗? 提前感谢您的回复和回答。

【问题讨论】:

  • 如何将令牌保存到数据库?请添加该代码。
  • 尝试使用logout 而不是invalidate()

标签: php laravel laravel-5 jwt jwt-auth


【解决方案1】:

快速的谷歌搜索将我指向这个解决方案: https://github.com/tymondesigns/jwt-auth/issues/983#issuecomment-275884324

【讨论】:

  • 您好,感谢您的回答。我已经通过使 JWT_BLACKLIST_ENABLED=false 尝试了解决方案,但这使我在注销时无法使令牌无效。如果令牌没有失效,它仍然可以用来访问 API。
  • 您是否尝试设置 JWT_BLACKLIST_ENABLED=false,然后设置 JWT_BLACKLIST_GRACE_PERIOD?其中一位表示将 JWT_BLACKLIST_GRACE_PERIOD 设置为 30 可以解决问题。 github.com/tymondesigns/jwt-auth/issues/…
猜你喜欢
  • 2019-02-23
  • 2020-01-22
  • 2019-05-12
  • 2016-08-31
  • 2020-01-20
  • 2017-11-23
  • 2021-04-16
  • 2019-12-31
  • 2016-12-30
相关资源
最近更新 更多