在JWT token中,refreshToken的作用主要是避免token过期时,前端用户突然退出登录产生不良体验。
试想,如果你正访问某基于jwt token机制的网站,该网站token过期时间是24小时,
你在23小时59分前已经登录过了,现在你访问某页面时,正好处于token过期时间24小时的临界点,
这时token突然过期,你上一秒看视频正起劲儿呢,下一秒就让你重新登录了,你说气不气?
这时候如果有一个refreshToken,虽然正式的token过期了,但前端却可以拿这个refreshToken来主动续期。
这样就解决了token过期导致用户上一秒还在登录,下一秒就突然退出登录的问题。
但是如何实现通过refreshToken刷新token呢?
-
首先,refreshToken有效时间一定要比token有效时间长至少才能不影响用户体验,具体要长多少得以实际需求为准,建议是24小时
-
前端每次访问后端都携带token,如果token失效则后端直接返回类似token失效请重新登录的报文。
-
前端第一次收到token失效的响应后,从本地存储拿refreshToken再去请求
-
后端一检测到refreshToken参数不为空,就去校验解析这个refreshToken
-
如果有效,后端就返回一个新的token及refreshToken给前端,前端收到后更新本地存储,同时拿这个新的token向后端发起第三次请求,然后成功获取资源
-
如果无效,则后端同样返回token失效,前端第二次收到失效的响应则跳转到登录页重新登录
-
这样就解决了以上场景的问题