项目用的是laravel。认证方式是jwt认证,我想token只能使用一次但是不知道怎么做?求大神提供思路.
JWT 认证应该带上时间戳(或者其他可以表明请求独立性的东西),每次发送请求的时候都计算一次 token,后端会拿到包含时间戳的参数列表和 token,然后根据它们也计算一个 token,如果两边一致,则 token 验证通过。
因此 token 本身就是要每次都重新计算一次的,你在前端存储 token 是没有太大价值的,当然可以用于记录日志,但这并没有太多意义。
2 回答1.6k 阅读✓ 已解决
1 回答1.4k 阅读✓ 已解决
2 回答988 阅读✓ 已解决
2 回答1.1k 阅读
1 回答934 阅读
1 回答890 阅读
1 回答885 阅读
刚才研究了一下源码得到如下答案
最简单的办法就是使用jwt自带的jwt.refresh路由中间件(在这之前应该使用jwt.auth验证了token的合法性).源代码如下
步骤为:
parseToken()把前端传过来的在http header中的token解析出来
refresh()函数负责依据现在的token生成一个新的token并把现在的token放到黑名单
最后将newToken写到返回给客户端的header中
最后我在研究源码的时候还发现如果我们需要每个请求都要刷新token的话那么就用jwt.refresh这一个中间件就好,不再需要jwt.auth这个中间件了。因为产生新的token的时候会解析出原来token中的payload的信息,比如sub。因此也会对原始的token进行验证。