核心思想
1、请求拦截器 请求拦截器中将access_token存储在请求头的Authorization中
2、响应拦截器 拦截请求中第一个401的请求并进行处理,调用刷新token的接口,然后携带新的token再次对返回401的请求发起请求
```// 刷新token的方法
// promise
let promise;
export async function refreshToken() {
if(promise){
return promise
}
promise = new Promise (async (resolve) =>{
// 刷新token
const resp - await request.get('/refresh_token',{
headers:{
Authorization:`Bearer ${getRefresh()}`
},
__isRefreshToken:true,
})
resolve(resp.code === 0)
})
promise.finally( () =>{
promise = null;
})
return promise;
}
export const isRefleshRequest = (params) => {
return !!params.__isRefreshToken
}
```const ins = axios.create({
baseURL:'http://localhost:9527',
headers:{
Authorization:`Bearer ${getToken()}`
}
)
ins.interceptors.response.use(async (res)=>{
// 未授权且为不是刷新token的接口报的401
if(res.data.code === 401 && !isRefreshRequest(res.config)){
const isSuccess = await refreshToken();
if(isSuccess){
console.log('重新登陆');
res.config.headers.Authorization = `Beara ${getToken()}`
const resp = await ins.request(res.config)
return resp
}else{
// 无权限
console.log('跳转到登陆');
return res.data
}
}
return res.data
})