From 19f3d6ca101ce2559ef6c6dce0f38abc0f14989e Mon Sep 17 00:00:00 2001 From: carry <2641257231@qq.com> Date: Sun, 16 Feb 2025 12:39:18 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E4=BA=86=E8=AF=B7=E6=B1=82?= =?UTF-8?q?=E6=8B=A6=E6=88=AA=E5=99=A8=E5=92=8C=E7=9B=B8=E5=BA=94=E6=8B=A6?= =?UTF-8?q?=E6=88=AA=E5=99=A8=E7=9A=84=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/api/axiosInstance.ts | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/src/api/axiosInstance.ts b/src/api/axiosInstance.ts index e334774..e18fdc2 100644 --- a/src/api/axiosInstance.ts +++ b/src/api/axiosInstance.ts @@ -14,10 +14,13 @@ const apiClient = axios.create({ apiClient.interceptors.request.use( async (config) => { const store = userStore(); - const accessToken = store.accessToken; - if (accessToken) { - config.headers.Authorization = `Bearer ${accessToken}`; + // 只有已登录状态才添加Authorization头 + if (store.isLoggedIn) { + const accessToken = store.accessToken; + if (accessToken) { + config.headers.Authorization = `Bearer ${accessToken}`; + } } return config; @@ -31,26 +34,35 @@ apiClient.interceptors.request.use( apiClient.interceptors.response.use( (response) => response, async (error) => { + const store = userStore(); // 获取用户状态 + + // 如果未登录,直接返回错误 + if (!store.isLoggedIn) { + return Promise.reject(error); + } + const originalRequest = error.config; - + // 如果401错误且不是刷新token的请求 if (error.response?.status === 401 && !originalRequest._retry) { originalRequest._retry = true; - + try { - const store = userStore(); + // 尝试刷新 token await store.refreshTokenMethod(); - - // 重试原始请求 + + // 更新请求头并重试原始请求 originalRequest.headers.Authorization = `Bearer ${store.accessToken}`; return apiClient(originalRequest); } catch (refreshError) { - // 刷新token失败,使用router跳转到登录页 + // 刷新 token 失败,清除登录状态并跳转登录页 + store.logout(); router.push({ name: 'login' }); return Promise.reject(refreshError); } } - + + // 非 401 错误或已重试过,直接返回错误 return Promise.reject(error); } );