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() {
return baseRequestClient.post('/system/auth/logout', {
withCredentials: true,
export async function logoutApi(accessToken: string) {
return baseRequestClient.post('/system/auth/logout', {}, {
headers: {
Authorization: `Bearer ${accessToken}`,
}
});
}

View File

@ -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);
}),

View File

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