feat: base 完善无感刷新

This commit is contained in:
caoqianming 2024-03-11 13:32:12 +08:00
parent ebf6e48d65
commit 052821526e
1 changed files with 35 additions and 43 deletions

View File

@ -15,7 +15,7 @@ let requests = [];
// HTTP request 拦截器 // HTTP request 拦截器
axios.interceptors.request.use( axios.interceptors.request.use(
(config) => { (config) => {
let token = tool.cookie.get("TOKEN")?tool.cookie.get("TOKEN"):tool.data.get("TOKEN"); let token = tool.data.get("TOKEN");
if(token){ if(token){
config.headers[sysConfig.TOKEN_NAME] = sysConfig.TOKEN_PREFIX + token config.headers[sysConfig.TOKEN_NAME] = sysConfig.TOKEN_PREFIX + token
} }
@ -47,49 +47,41 @@ axios.interceptors.response.use(
title: '请求失败', title: '请求失败',
message: "账户密码错误或已禁用" message: "账户密码错误或已禁用"
}); });
// if (!isRefreshing) {
// isRefreshing = true;
// axios({
// method: 'post',
// url: sysConfig.API_URL+'/auth/token/refresh/',
// headers: {
// Authorization: `Bearer ${tool.cookie.get("TOKEN")}`,
// },
// data:{refresh:tool.cookie.get("TOKEN_REFRESH")}
// }).then(res=>{
// debugger;
// console.log(res.data.access);
// // 替换本地的token
// tool.cookie.set("TOKEN", res.data.access);
// tool.data.set("TOKEN_TIME", new Date().getTime());
// error.config.headers[sysConfig.TOKEN_NAME] = sysConfig.TOKEN_PREFIX + res.data.access;
// isRefreshing = false;
// requests.forEach(cb => cb())
// //发起后将requests置空
// requests=[];
// return axios(error.config)
// }).catch(()=>{
// // refresh_token 有值 , 但是过期了, 请求失败
// router.push('/login')
// })
// }else{
// //如果正在刷新token将发起的请求暂存在requests中
// return new Promise((resolve)=>{
// requests.push(()=>{
// resolve(axios(error.config));
// })
// })
// }
}else{ }else{
// ElMessageBox.confirm('当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。', '无权限访问', { if (error.config.url.indexOf('auth/token/refresh/') != -1) {
// type: 'error', isRefreshing = false;
// closeOnClickModal: false, requests=[];
// center: true, router.push('/login');
// confirmButtonText: '重新登录' return
// }).then(() => { }
router.replace({path: '/login'}); if (!isRefreshing) {
// }).catch(() => {}) isRefreshing = true;
axios({
method: 'post',
url: sysConfig.API_URL+'/auth/token/refresh/',
headers: {
Authorization: `Bearer ${tool.data.get("TOKEN")}`,
},
data:{refresh:tool.data.get("TOKEN_REFRESH")}
}).then(res=>{
// 替换本地的token
tool.data.set("TOKEN", res.data.access);
tool.data.set("TOKEN_TIME", new Date().getTime());
error.config.headers[sysConfig.TOKEN_NAME] = sysConfig.TOKEN_PREFIX + res.data.access;
isRefreshing = false;
requests.forEach(cb => cb())
//发起后将requests置空
requests=[];
return axios(error.config)
})
}else{
//如果正在刷新token将发起的请求暂存在requests中
return new Promise((resolve)=>{
requests.push(()=>{
resolve(axios(error.config));
})
})
}
} }
} else { } else {