优化了请求拦截器和相应拦截器的逻辑
This commit is contained in:
parent
6bf8a96454
commit
19f3d6ca10
@ -14,10 +14,13 @@ const apiClient = axios.create({
|
|||||||
apiClient.interceptors.request.use(
|
apiClient.interceptors.request.use(
|
||||||
async (config) => {
|
async (config) => {
|
||||||
const store = userStore();
|
const store = userStore();
|
||||||
const accessToken = store.accessToken;
|
|
||||||
|
|
||||||
if (accessToken) {
|
// 只有已登录状态才添加Authorization头
|
||||||
config.headers.Authorization = `Bearer ${accessToken}`;
|
if (store.isLoggedIn) {
|
||||||
|
const accessToken = store.accessToken;
|
||||||
|
if (accessToken) {
|
||||||
|
config.headers.Authorization = `Bearer ${accessToken}`;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return config;
|
return config;
|
||||||
@ -31,26 +34,35 @@ apiClient.interceptors.request.use(
|
|||||||
apiClient.interceptors.response.use(
|
apiClient.interceptors.response.use(
|
||||||
(response) => response,
|
(response) => response,
|
||||||
async (error) => {
|
async (error) => {
|
||||||
|
const store = userStore(); // 获取用户状态
|
||||||
|
|
||||||
|
// 如果未登录,直接返回错误
|
||||||
|
if (!store.isLoggedIn) {
|
||||||
|
return Promise.reject(error);
|
||||||
|
}
|
||||||
|
|
||||||
const originalRequest = error.config;
|
const originalRequest = error.config;
|
||||||
|
|
||||||
// 如果401错误且不是刷新token的请求
|
// 如果401错误且不是刷新token的请求
|
||||||
if (error.response?.status === 401 && !originalRequest._retry) {
|
if (error.response?.status === 401 && !originalRequest._retry) {
|
||||||
originalRequest._retry = true;
|
originalRequest._retry = true;
|
||||||
|
|
||||||
try {
|
try {
|
||||||
const store = userStore();
|
// 尝试刷新 token
|
||||||
await store.refreshTokenMethod();
|
await store.refreshTokenMethod();
|
||||||
|
|
||||||
// 重试原始请求
|
// 更新请求头并重试原始请求
|
||||||
originalRequest.headers.Authorization = `Bearer ${store.accessToken}`;
|
originalRequest.headers.Authorization = `Bearer ${store.accessToken}`;
|
||||||
return apiClient(originalRequest);
|
return apiClient(originalRequest);
|
||||||
} catch (refreshError) {
|
} catch (refreshError) {
|
||||||
// 刷新token失败,使用router跳转到登录页
|
// 刷新 token 失败,清除登录状态并跳转登录页
|
||||||
|
store.logout();
|
||||||
router.push({ name: 'login' });
|
router.push({ name: 'login' });
|
||||||
return Promise.reject(refreshError);
|
return Promise.reject(refreshError);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 非 401 错误或已重试过,直接返回错误
|
||||||
return Promise.reject(error);
|
return Promise.reject(error);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user