JWT 如何像 Session 一样延长时间?

使用 https://github.com/tymondesigns/jwt-auth 这个包
我将 JWT 的 ttl 和 refresh_ttl 分别设置成 1 小时和 24 小时
使用一个 middleware 来处理 token, 如果遇到过期 则进行刷新。直到超出 refresh_ttl

这样做的话。有个问题。如果有用户在最后一小时进行操作的话。或者更极端的最后一秒还有在线的行为,那么后一秒因为超出 refresh_ttl 以及 ttl 过期 而导致需要重新登录

jwt-auth 包能否做到像 session 一样。自动延长过期时间?

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 5
leo

refresh token 就是设计来做这个事情的啊

8年前 评论

@leo refresh ttl 只能做到在此限定时间内 允许刷新 TOKEN. 还是会存在 最后一秒哪怕用户活跃 还是会发生过期的行为
它不能像 Session 一样 延长生命周期.

8年前 评论

我想知道 JWT 能否做到像 session 一样。如果 N 时间是用户最后一次活跃时间点。那么 N+5 则是过期时间.
而不是目前这种,限定了 ttl 和 refresh_ttl 后,无论期间用户是否有持续的交互 只要超过了 token 时效,并且 refresh_ttl 也超出了最后的限期 就无法为 token 延时

8年前 评论
leo

JWT 的过期时间编码在 token 里的,所以不可能在不改变 token 的情况下修改过期时间。

通常的解决方案是每次用户请求都通过 cookie 返回新的 token

8年前 评论

我深有体会,ipad 端斗鱼一年都不过期,熊猫每星期登录一次。用户每次登录颁发一次 token, ttl 和 refresh_ttl 分别设置成 1 小时和 999999 小时。反正 token 谁都都可以看到数据

7年前 评论