实现方案
后端生成两个token(token和refresh_token),token有效时间短,refresh_token有效时间长; 前端请求登录后,后端把这两个token传给前端,前端缓存下来;
- token未到期,前端可正常请求。
- token过期,后端会返回与前端约定好的相关参数(比如,响应码401),前端在返回拦截器中判断拦截,并将refresh_token替换掉已经失效的token去调用api_refresh_token的接口请求。后端则判断refresh_token是否过期。
(1)refresh_token未过期,后端重新生成token和refresh_token返给前端。前端接收到后,缓存token,并重新执行之前失败的接口。
(2)refresh_token过期,后端返回token失效,前端跳转到登录页。
分析
token和refresh_token的时间点 | 需要实现的结果 |
---|---|
token和refersh_token都没失效 | 正常请求 |
token失效,refresh_token没失效 | 请求提示token失效,前端需要调api_refresh_token的请求,获取新的token |
token和refresh_token都失效 | 请求提示token失效,前端需要调api_refresh_token的请求,请求失败,退出登录 |
代码实现
前端代码
后端代码
本文参考
https://blog.csdn.net/weixin_44115908/article/details/106063316