feat:刷新令牌的完整实现

pull/62/head
YunaiV 2025-03-27 11:36:30 +08:00
parent 5659dab41e
commit b79a239b4c
3 changed files with 17 additions and 5 deletions

View File

@ -48,10 +48,11 @@ export async function refreshTokenApi(refreshToken: string) {
} }
/** 退出登录 */ /** 退出登录 */
// TODO @芋艿:有问题 baseRequestClient export async function logoutApi(accessToken: string) {
export async function logoutApi() { return baseRequestClient.post('/system/auth/logout', {}, {
return baseRequestClient.post('/system/auth/logout', { headers: {
withCredentials: true, Authorization: `Bearer ${accessToken}`,
}
}); });
} }

View File

@ -53,6 +53,10 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
const refreshToken = accessStore.refreshToken as string; const refreshToken = accessStore.refreshToken as string;
const resp = await refreshTokenApi(refreshToken); const resp = await refreshTokenApi(refreshToken);
const newToken = resp?.data?.data?.accessToken; const newToken = resp?.data?.data?.accessToken;
// add by 芋艿:这里一定要抛出 resp.data从而触发 authenticateResponseInterceptor 中,刷新令牌失败!!!
if (!newToken) {
throw resp.data;
}
accessStore.setAccessToken(newToken); accessStore.setAccessToken(newToken);
return newToken; return newToken;
} }
@ -102,6 +106,10 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
const responseData = error?.response?.data ?? {}; const responseData = error?.response?.data ?? {};
const errorMessage = const errorMessage =
responseData?.error ?? responseData?.message ?? responseData.msg ?? ''; responseData?.error ?? responseData?.message ?? responseData.msg ?? '';
// add by 芋艿:特殊:避免 401 “账号未登录”,重复提示。因为,此时会跳转到登录界面,只需提示一次!!!
if (error?.data?.code === 401) {
return;
}
// 如果没有错误信息,则会根据状态码进行提示 // 如果没有错误信息,则会根据状态码进行提示
message.error(errorMessage || msg); message.error(errorMessage || msg);
}), }),

View File

@ -76,7 +76,10 @@ export const useAuthStore = defineStore('auth', () => {
async function logout(redirect: boolean = true) { async function logout(redirect: boolean = true) {
try { try {
await logoutApi(); const accessToken = accessStore.accessToken as string;
if (accessToken) {
await logoutApi(accessToken);
}
} catch { } catch {
// 不做任何处理 // 不做任何处理
} }