From b79a239b4c25682e762699841832c8a9c084632b Mon Sep 17 00:00:00 2001 From: YunaiV Date: Thu, 27 Mar 2025 11:36:30 +0800 Subject: [PATCH] =?UTF-8?q?feat=EF=BC=9A=E5=88=B7=E6=96=B0=E4=BB=A4?= =?UTF-8?q?=E7=89=8C=E7=9A=84=E5=AE=8C=E6=95=B4=E5=AE=9E=E7=8E=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- apps/web-antd/src/api/core/auth.ts | 9 +++++---- apps/web-antd/src/api/request.ts | 8 ++++++++ apps/web-antd/src/store/auth.ts | 5 ++++- 3 files changed, 17 insertions(+), 5 deletions(-) diff --git a/apps/web-antd/src/api/core/auth.ts b/apps/web-antd/src/api/core/auth.ts index 54f16e996..4071577dd 100644 --- a/apps/web-antd/src/api/core/auth.ts +++ b/apps/web-antd/src/api/core/auth.ts @@ -48,10 +48,11 @@ export async function refreshTokenApi(refreshToken: string) { } /** 退出登录 */ -// TODO @芋艿:有问题 baseRequestClient -export async function logoutApi() { - return baseRequestClient.post('/system/auth/logout', { - withCredentials: true, +export async function logoutApi(accessToken: string) { + return baseRequestClient.post('/system/auth/logout', {}, { + headers: { + Authorization: `Bearer ${accessToken}`, + } }); } diff --git a/apps/web-antd/src/api/request.ts b/apps/web-antd/src/api/request.ts index be6382f21..b6375aaff 100644 --- a/apps/web-antd/src/api/request.ts +++ b/apps/web-antd/src/api/request.ts @@ -53,6 +53,10 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) { const refreshToken = accessStore.refreshToken as string; const resp = await refreshTokenApi(refreshToken); const newToken = resp?.data?.data?.accessToken; + // add by 芋艿:这里一定要抛出 resp.data,从而触发 authenticateResponseInterceptor 中,刷新令牌失败!!! + if (!newToken) { + throw resp.data; + } accessStore.setAccessToken(newToken); return newToken; } @@ -102,6 +106,10 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) { const responseData = error?.response?.data ?? {}; const errorMessage = responseData?.error ?? responseData?.message ?? responseData.msg ?? ''; + // add by 芋艿:特殊:避免 401 “账号未登录”,重复提示。因为,此时会跳转到登录界面,只需提示一次!!! + if (error?.data?.code === 401) { + return; + } // 如果没有错误信息,则会根据状态码进行提示 message.error(errorMessage || msg); }), diff --git a/apps/web-antd/src/store/auth.ts b/apps/web-antd/src/store/auth.ts index de2a22ea9..e4abf9c0a 100644 --- a/apps/web-antd/src/store/auth.ts +++ b/apps/web-antd/src/store/auth.ts @@ -76,7 +76,10 @@ export const useAuthStore = defineStore('auth', () => { async function logout(redirect: boolean = true) { try { - await logoutApi(); + const accessToken = accessStore.accessToken as string; + if (accessToken) { + await logoutApi(accessToken); + } } catch { // 不做任何处理 }