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 { // 不做任何处理 }