老师你好,我们项目使用的是被动刷新token,过程是:
1、token生命周期为30分钟或其他时间
2、生命周期由后台维护不对前端开放
3、前端带token请求时,如果token有效,则后台会把这个token的生命周期重新刷新为一个完整生命周期(比如剩余有效生命周期重新回到30分钟)
4、刷新的token的方法只会发生在:前端在某个请求提示过期后,才刷新 token 接口换取新token。
5、获取新token后再把之前过期的业务请求再重新发一次
这第4、5点,我前端会有两个操作不知道怎么处理:
1、由于同一个页面会发多个接口,请求回调发现过期后,已经发出的几个接口肯定也会报过期,我在换取token后,再次发送请求这个动作容易做到(比如把所有回调过期的请求的config放进数组里,等刷新接口回调成功后,去循环请求这个数组)。但是问题在于,循环重发请求后,我如何做到在这次循环请求过程中,一对一的把成功回调来的response数据再返回给上次过期时对应的业务请求呢?毕竟这次请求动作是我通过拦截器操作的,不是由业务接口发起的。(axios的use方法是针对每个请求的,我在这次请求完成后如何把第二次的请求数据返回给对应的use呢?)
2、还有一点是我思考的,我看APP端可以做到在某次请求拦截里阻塞剩余的请求,前端是否能做到呢,假如后台也给了token的生命周期给我前端,我在请求拦截器里请求判断时间已经过期,这时候即使我主动刷新token,依旧会存在一个页面多个请求,导致我重新发起的请求无法返回数据给上一次的对应请求。那么是否能做到,发现时间过期后,直接在请求拦截器中,阻塞住剩余的请求呢?
这个问题困扰我很久了,希望老师能点拨我一下,实在是找不到解决方案了,万分感谢QAQ