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

Laravel使用tymondesigns/jwt-auth遇token过期,配置无效求助

解决tymondesigns/jwt-auth令牌过期问题(即使ttl设为null)

我遇到过不少开发者碰到这个问题——明明把jwt配置里的ttl设为null、移除了exp声明,还是收到token过期的提示,下面几个排查方向应该能帮到你:

1. 先清除Laravel配置缓存

Laravel会缓存配置文件来提升性能,如果你修改了config/jwt.php但没清除缓存,应用其实还是在使用旧的配置。执行这两个命令:

php artisan config:clear
php artisan cache:clear

如果之前执行过php artisan config:cache,一定要先清除缓存,不然修改的配置不会生效。

2. 检查token生成逻辑是否强制设置了TTL或exp声明

有时候自定义的token生成代码会覆盖配置里的设置:

  • 检查你的User模型实现JWTSubject接口的getJWTCustomClaims方法,有没有手动添加exp声明,比如:
    public function getJWTCustomClaims()
    {
        return [
            'exp' => now()->addHour()->timestamp, // 这里会强制添加过期时间
            'foo' => 'bar'
        ];
    }
    
    如果有,把exp键删掉。
  • 检查生成token的代码,有没有调用setTTL方法强制设置过期时间,比如:
    $token = JWTAuth::fromUser($user)->setTTL(60); // 这里会覆盖配置的null
    
    去掉setTTL调用即可。

3. 解析token确认实际内容

用jwt.io把你的token解析一下,看看payload里到底有没有exp字段。如果有,说明生成token的时候还是被加上了,回到上面的步骤找强制添加的地方;如果没有,那问题可能出在验证环节。

4. 检查验证逻辑和守卫配置

  • 确认config/auth.php里的jwt守卫配置正确:
    'guards' => [
        'api' => [
            'driver' => 'jwt',
            'provider' => 'users',
        ],
    ],
    
  • 有没有自定义的中间件在验证token时额外做了过期检查?比如自己写的中间件里手动判断exp字段,即使token里没有也报错,这种情况要修改中间件逻辑。

5. 确认包的版本兼容性

有些旧版本的tymondesigns/jwt-auth在处理ttl为null时存在bug,比如版本低于1.0.0的分支。建议升级到最新的稳定版,或者查看你当前版本的官方文档,确认ttl设为null的正确用法。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:03:28