app
scout 6 months ago
parent 73cbe9ad65
commit 2372727305

@ -9,6 +9,8 @@ const request = axios.create({
timeout:60 * 60 * 1000
});
let loading
let isRefreshing = false;
let refreshSubscribers = [];
request.interceptors.request.use((config)=>{
if (config.loading!==false){
loading=ElLoading.service({
@ -23,12 +25,63 @@ request.interceptors.request.use((config)=>{
request.interceptors.response.use(async (res)=>{
// 如果返回401说明token过期需要重新登录
if (res && res.data.code === 401) {
// 重新登录
await router.push('/login')
return getRefreshToken(res);
}
loading?.close()
return res.data;
},()=>{
loading?.close()
});
// 获取刷新token刷新token成功后重新请求
const getRefreshToken = async (response) => {
if (!isRefreshing) {
isRefreshing = true;
const refreshToken = Local.get("RefreshToken");
if (refreshToken) {
try {
const data = { refreshToken };
const res = await fetch(
import.meta.env.VITE_APP_API_BASE_URL+"/user/refresh/token",
{
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify(data),
}
);
const responseData = await res.json(); // Parse the response body as JSON
if (responseData.code === 200) {
console.log("刷新token成功");
Local.set("token", responseData.data.Token);
Local.set("userInfo", responseData.data.AccountInfo);
Local.set("RefreshToken", responseData.data.RefreshToken);
return Promise.resolve(request(response.config));
} else {
// 重新登录
await router.push('/login');
responseData.message = responseData.message || responseData.msg;
return Promise.reject(responseData);
}
} catch (error) {
return Promise.reject(error);
} finally {
isRefreshing = false;
refreshSubscribers.forEach((callback) => callback());
refreshSubscribers = [];
}
} else {
// 重新登录
await router.push('/login')
return Promise.reject(response);
}
} else {
return new Promise((resolve) => {
refreshSubscribers.push(() => {
resolve(request(response.config));
});
});
}
};
export default request;

Loading…
Cancel
Save