token是我们在登录系统后,后端会给我们返回的一个字段,我们需要在每次发送请求的时候,将token注入请求头,这样后端才能够给我们返回我们需要的信息。出于安全考虑,token的有效期一般是1-8小时,一般是2小时,那设想这样两个场景:
1.如果用户一天都在我们系统上打工,忙了九个小时,结果token过期了,没办法发送请求了,只能退出重新登录,重新获取新的token,肯定会影响用户体验的。我们需要token过期了,但是通过某种手段,让用户能够继续正常使用我们的系统,用户感觉不到。
2.用户如果一段时间,比如说半个小时,在我们的系统上没有进行任何操作,这个时候,我们应该检测到这个情况,并且让用户重新回到登录页登录。
针对1:
我们在第一次登录的时候,需要后端给我们返回两个token,假设key为token和refresh_token,第一个的时效还是1-8小时,第二个就设的更长一些,比如说半个月,当系统一直用到第一个token失效了,我们和后端协商,让他们去判断,然后返回是否失效,前端在响应拦截器中做一个判断,如果失效,就重新用第二个refresh_token,重新发一次这个判断,并且让后端重新给我们返第一个的token,然后我们存起来,之后可以继续用。
针对2:
我们在每一次发送请求的时候,在我们的响应拦截器中,都去记录一下当前的时间戳,并且更新到cookie中,这个代表着,上一次发送请求的时间戳。第二次发送请求的时候,在请求拦截器中去time.now()得到我们第二次的时间戳,并且和第一次的对比,如果时间大于半小时,就让用户跳转回登录页面重新登录。
PS:针对情况1,我们也可以使用时间戳,这样我们只需要知道token的时效时长,登录的时候记录时间戳,发送请求的时候得到当前时间戳,去进行判断,如果超时,就用第二个refresh_token.