更新Laravel API中tymon/jwt-auth令牌
P粉798010441
P粉798010441 2023-08-14 14:35:54
0
2
502
<p>我有一个Laravel API,我已经安装了<code>tymon/jwt-auth</code>。为了登录用户并获取令牌,我使用以下代码:</p> <pre class="brush:php;toolbar:false;">if (! $token = auth()->attempt($request->only('email', 'password'), true)) { throw ValidationException::withMessages([ 'email' => 'Invalid Credentials', ]); } return new TokenResource([ 'token' => $token, 'user' => $user, ]); </pre> <p>我还有一个<code>refresh token</code>的端点,它应该使旧的令牌失效并发放一个新的令牌。根据文档,我添加了以下代码:</p> <pre class="brush:php;toolbar:false;">return new TokenResource([ 'token' => auth()->refresh(), 'user' => auth()->user(), ]); </pre> <p>问题是,当我使用当前令牌访问该端点时,它确实返回一个新的令牌,但旧的令牌仍然有效。</p> <p>有没有一种方法可以使刷新令牌无效?</p>
P粉798010441
P粉798010441

全部回复(2)
P粉557957970

这是默认行为。所以为了实现你想要的结果,你可以将它们列入黑名单。当用户尝试使用一个令牌时,你可以检查它是否在黑名单中。如果是的话,你可以拒绝它。

你可以通过创建一个中间件来实现这一点,该中间件会检查令牌是否在黑名单中,并将该中间件应用于需要令牌验证的路由。

中间件:

public function handle($request, Closure $next)
{
    $token = $request->bearerToken();
    
    if (TokenBlacklist::where('token', $token)->exists()) {
        return response()->json(['message' => '令牌已失效'], 401);
    }

    return $next($request);
}

然而,只有在你的系统实际需要时才应该这样做。

P粉768045522

在创建后,您无法手动使令牌过期。这就是令牌的工作原理。如果您创建了令牌,它将在过期之前有效,但您可以创建令牌的黑名单,每次刷新令牌时,将第一个令牌添加到黑名单中,还可以考虑降低令牌的生命周期(如果足够低),您可以依靠自动过期机制。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!