sawAdmin/src/utils/user_center_request.ts

126 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import axios from "axios";
import router from "@/router/index.js";
import Cookies from 'js-cookie';
import { ElMessage } from 'element-plus';
//const baseURL = "https://gep.ljsea.top/";
const baseURL = "https://uc.ljsea.top/";
//const baseURL= "http://localhost:8084";
//const baseURL="https://pm.ljsea.top";
//const baseURL = "https://gep.ljsea.xyz/";
let isRefreshing = false;
let requests = [];
const request = axios.create({
baseURL: baseURL,
});
// 请求拦截器 - 添加token
request.interceptors.request.use();
// 响应拦截器
request.interceptors.response.use(
result => {
if(result.status !== 200) {
router.push("/login");
}
if(result.data.message === "NOT_LOGIN" || [2, 3, 4].includes(result.data.code)) {
// 检测到token过期
if (isRefreshing == false) {
isRefreshing = true;
// 这里需要替换为实际的refresh token请求
return axios.post('https://uc.ljsea.top/user/refresh_token', {
refresh_token: localStorage.getItem("refresh_token")
},{
headers: {
'Authorization': `Bearer ${localStorage.getItem("refresh_token")}`
}
}).then(res => {
const token = res.data["data"]["access_token"];
localStorage.setItem("token", token);
// 重试所有挂起的请求
requests.forEach(cb => cb(token));
requests = [];
isRefreshing = false;
// 重试当前请求
const config = result.config;
config.headers.Authorization = `Bearer ${token}`;
return request(config);
}).catch(err => {
// 刷新token失败跳转登录
ElMessage.error('登录已过期请重新登录12');
router.push("/login");
return Promise.reject(err);
});
} else if (isRefreshing) {
// 正在刷新token将请求放入队列
return new Promise(resolve => {
requests.push(token => {
result.config.headers.Authorization = `Bearer ${token}`;
resolve(request(result.config));
});
});
}
}
if(result.data.code == 7) {
ElMessage.error('该用户已存在,请重新输入!');
return null;
}
if(result.data.code == 1) {
ElMessage.error('请求失败,请稍后重试!');
} else {
return result.data;
}
},
error => {
if (error.response && error.response.status === 401 && !isRefreshing) {
// 处理401未授权错误
const originalRequest = error.config;
if (!isRefreshing) {
isRefreshing = true;
return axios.post(baseURL+'user/refresh', {
refresh_token: localStorage.getItem("refresh_token")
},{
headers: {
'Authorization': `Bearer ${localStorage.getItem("refresh_token")}`
}
}).then(res => {
const { token, refresh_token } = res.data;
localStorage.setItem("token", token);
localStorage.setItem("refresh_token", refresh_token);
requests.forEach(cb => cb(token));
requests = [];
isRefreshing = false;
originalRequest.headers.Authorization = `Bearer ${token}`;
return request(originalRequest);
}).catch(err => {
ElMessage.error('登录已过期,请重新登录!');
localStorage.removeItem("token");
localStorage.removeItem("refresh_token");
router.push("/login");
return Promise.reject(err);
});
} else {
return new Promise(resolve => {
requests.push(token => {
originalRequest.headers.Authorization = `Bearer ${token}`;
resolve(request(originalRequest));
});
});
}
}
ElMessage.error('请求失败,请稍后重试!');
return Promise.reject(error);
}
);
export default request;