对token机制的学习和分析

token,中文意思为令牌,是用户登录后会返回的一个字符串,里面包括用户信息、登录时间等,但是是加密过的密文,其加解密方式由后端决定。

在登录之后的接口请求中,前端需在请求中统一加上token,从而识别用户,可通过统一封装请求实现。

而token也是会过期的,由后端配置确定的过期时间,与用户操不操作系统无关。若过期,则需调用refreshToken接口,把旧的token传给接口,从而获得新的token,前端再存储下来。

当后端发回新的token后,再次用旧的token去获得新的token则会失败。

token与session不同,session则无需在请求时前端手动添加,且session是否过期从用户不操作系统的时间开始算。

 

当某页面中,多接口同时发起请求时,若此时token过期,则处理方式有两种:

统一封装接口进行如下处理:

1.若某个请求接口返回token过期,则请求refreshToken的接口,拿到新的token并存储后重新加载页面。

2.最开始的时候设置isRefreshToken变量为true,若某个请求接口返回token过期,则去请求refreshToken的接口,并异步将isRefreshToken置为false。

然后将剩下的请求进行排队等待(例如放入观察者数组),等第一个请求拿到新的token并存储到本地后,再将排队的接口放出去执行请求,并将isRefreshToken置为true。

这里,isRefreshToken相当于一个锁,控制去刷新token的请求数始终为1。

 

posted @ 2019-12-06 14:09  罗毅豪  阅读(488)  评论(0编辑  收藏  举报