token 第二次过期就不能再刷新了。
1. 运行环境
Windows 10 apache2 + php
1). 当前使用的 Laravel 版本?
Laravel Framework 9.33.0
2). 当前使用的 php/php-fpm 版本?
PHP 版本:
PHP 8.1.16
php-fpm 版本:
3). 当前系统
Windows 10
4). 业务环境
5). 相关软件版本
2. 问题描述?
jwt-auth 包是:”php-open-source-saver/jwt-auth”: “^2.1”
配置
JWT_SECRET=UjopxiS6mzw4Wy2RkVucteIR4pCK2DKhSgqm78CbJWYnmg1Mwrm5lBoHcFfOU1T8
JWT_TTL=1
JWT_REFRESH_TTL=2
JWT_SHOW_BLACKLIST_EXCEPTION=true
现在的情况是我通过用户名密码获取了 token1,token1 一分钟过期了,我用过 token1 可以刷新一个新的 token2 使用,但是当 token2 一分钟后过期了,我用 token2 想再刷新一个新的 token3 的时候报错了:Token has expired and can no longer be refreshed。按道理是在两分钟内是可以刷新新的 token 的。JWT_REFRESH_TTL=2 这个设置是我理解错了还是包有问题。
3. 您期望得到的结果?
可以刷新 token
4. 您实际得到的结果?
token 第二次过期就不能再刷新了。
感谢大家,用 ChatGPT 翻译了一下这个配置的说明:
我按照翻译理解,他这个刷新时间只能是每次登录时重置,这样能尽量保正 token 的安全,不然只要获取到一次 token 就可以无限刷新新的 token 了,事实上他也确实告诉了我们只要配置 null 就可以无限刷新新的 token 了,但是他说不推荐,但确保如果需要的这么做的话,最好适当的做一些操作来可以撤销令牌(我能想到的是后台记录用户最后操作时间,判断这个用户多久没活动了,然后强制他的所有 token 失效)。