You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel API中tymon/jwt-auth刷新token后旧token仍可用的问题求助

解决Laravel中tymon/jwt-auth刷新token后旧token仍有效问题

要实现刷新token时立即让旧token失效,需要借助tymon/jwt-auth的黑名单机制,具体步骤如下:

1. 确保黑名单功能已启用

首先确认config/jwt.php配置文件中blacklist_enabled选项为true:

'blacklist_enabled' => true,

如果还未发布过JWT配置文件,先执行以下命令生成配置文件:

php artisan vendor:publish --provider="Tymon\JWTAuth\Providers\LaravelServiceProvider"

2. 配置黑名单存储驱动(可选)

默认黑名单使用cache驱动,如果你需要持久化存储黑名单记录,可以切换为database驱动:
在config/jwt.php中修改:

'blacklist_driver' => 'database',

然后执行迁移生成黑名单表:

php artisan jwt:table
php artisan migrate

3. 修改刷新token端点代码

更新你的refresh端点逻辑,先将旧token加入黑名单使其失效,再生成新token:

// 获取当前请求中的旧token
$oldToken = auth()->getToken();

// 将旧token加入黑名单,立即失效
auth()->invalidate($oldToken);

// 生成新的访问token
$newToken = auth()->refresh();

return new TokenResource([
    'token' => $newToken,
    'user' => auth()->user(),
]);

注意事项

  • 启用黑名单后,每次请求都会验证token是否在黑名单中,会带来轻微的性能损耗,这是实现token立即失效的必要代价。
  • 如果使用cache驱动,黑名单中的token会在原token过期时间后自动清除;如果使用database驱动,需要手动清理过期记录(可通过定时任务实现)。

内容的提问来源于stack exchange,提问作者BigJobbies

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 12:41:08