From 5505d06ada28d8d322de8d980809c8b863a9b086 Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 6 Feb 2026 13:41:34 +0800 Subject: [PATCH 1/6] fix: refresh token --- playground/src/api/core/auth.ts | 16 ++++++++++++++-- playground/src/store/auth.ts | 3 ++- playground/src/utils/token-util.ts | 5 +++++ 3 files changed, 21 insertions(+), 3 deletions(-) create mode 100644 playground/src/utils/token-util.ts diff --git a/playground/src/api/core/auth.ts b/playground/src/api/core/auth.ts index b4627cbe7..d2ce57d16 100644 --- a/playground/src/api/core/auth.ts +++ b/playground/src/api/core/auth.ts @@ -1,4 +1,7 @@ import { baseRequestClient, requestClient } from '#/api/request'; +import { useAccessStore } from '@vben/stores'; + +import { formatToken } from '#/utils/token-util'; export namespace AuthApi { /** 登录接口参数 */ @@ -10,6 +13,7 @@ export namespace AuthApi { /** 登录接口返回值 */ export interface LoginResult { accessToken: string; + refreshToken: string; } export interface RefreshTokenResult { @@ -31,11 +35,15 @@ export async function loginApi(data: AuthApi.LoginParams) { * 刷新accessToken */ export async function refreshTokenApi() { - return baseRequestClient.post( + const accessStore = useAccessStore(); + return await baseRequestClient.post( '/auth/refresh', null, { withCredentials: true, + headers: { + Authorization: formatToken(accessStore.refreshToken), + }, }, ); } @@ -44,8 +52,12 @@ export async function refreshTokenApi() { * 退出登录 */ export async function logoutApi() { - return baseRequestClient.post('/auth/logout', null, { + const accessStore = useAccessStore(); + return await baseRequestClient.post('/auth/logout', null, { withCredentials: true, + headers: { + Authorization: formatToken(accessStore.accessToken), + }, }); } diff --git a/playground/src/store/auth.ts b/playground/src/store/auth.ts index b50ee7729..ab27bbeeb 100644 --- a/playground/src/store/auth.ts +++ b/playground/src/store/auth.ts @@ -34,11 +34,12 @@ export const useAuthStore = defineStore('auth', () => { let userInfo: null | UserInfo = null; try { loginLoading.value = true; - const { accessToken } = await loginApi(params); + const { refreshToken, accessToken } = await loginApi(params); // 如果成功获取到 accessToken if (accessToken) { accessStore.setAccessToken(accessToken); + accessStore.setRefreshToken(refreshToken); // 获取用户信息并存储到 accessStore 中 const [fetchUserInfoResult, accessCodes] = await Promise.all([ diff --git a/playground/src/utils/token-util.ts b/playground/src/utils/token-util.ts new file mode 100644 index 000000000..99abcd244 --- /dev/null +++ b/playground/src/utils/token-util.ts @@ -0,0 +1,5 @@ +function formatToken(token: null | string) { + return token ? `Bearer ${token}` : null; +} + +export { formatToken }; From fbc04a37029159544fd877b6d5e8cd5f836228d5 Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 6 Feb 2026 13:42:04 +0800 Subject: [PATCH 2/6] fix: import --- playground/src/api/core/auth.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playground/src/api/core/auth.ts b/playground/src/api/core/auth.ts index d2ce57d16..6b81286a6 100644 --- a/playground/src/api/core/auth.ts +++ b/playground/src/api/core/auth.ts @@ -1,6 +1,6 @@ -import { baseRequestClient, requestClient } from '#/api/request'; import { useAccessStore } from '@vben/stores'; +import { baseRequestClient, requestClient } from '#/api/request'; import { formatToken } from '#/utils/token-util'; export namespace AuthApi { From fa36d04d690492e5ab057719c1c7c226721efaf3 Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 6 Feb 2026 14:03:59 +0800 Subject: [PATCH 3/6] fix: doRefreshToken should extract resp.data.data for the token string --- playground/src/api/request.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playground/src/api/request.ts b/playground/src/api/request.ts index a88553613..efcb14938 100644 --- a/playground/src/api/request.ts +++ b/playground/src/api/request.ts @@ -65,7 +65,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) { async function doRefreshToken() { const accessStore = useAccessStore(); const resp = await refreshTokenApi(); - const newToken = resp.data; + const newToken = resp.data.data; accessStore.setAccessToken(newToken); return newToken; } From 412445daafa12d69105f24a8af221ec67ec782ed Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 6 Feb 2026 14:11:16 +0800 Subject: [PATCH 4/6] =?UTF-8?q?chore:=20=E6=B7=BB=E5=8A=A0=E6=B3=A8?= =?UTF-8?q?=E9=87=8A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- playground/src/api/request.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/playground/src/api/request.ts b/playground/src/api/request.ts index efcb14938..4cd2ce56b 100644 --- a/playground/src/api/request.ts +++ b/playground/src/api/request.ts @@ -65,7 +65,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) { async function doRefreshToken() { const accessStore = useAccessStore(); const resp = await refreshTokenApi(); - const newToken = resp.data.data; + const newToken = resp.data.data; // 根据你自己的 api 返回的数据格式调整, 比如: resp.data.data.accessToken accessStore.setAccessToken(newToken); return newToken; } From 4b1e364b17deb7c8a172c6196dc384d8475f9c66 Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 6 Feb 2026 14:11:48 +0800 Subject: [PATCH 5/6] chore: format --- playground/src/api/request.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/playground/src/api/request.ts b/playground/src/api/request.ts index 4cd2ce56b..9c59ceafe 100644 --- a/playground/src/api/request.ts +++ b/playground/src/api/request.ts @@ -2,15 +2,15 @@ * 该文件可自行根据业务逻辑进行调整 */ import type { AxiosResponseHeaders, RequestClientOptions } from '@vben/request'; - -import { useAppConfig } from '@vben/hooks'; -import { preferences } from '@vben/preferences'; import { authenticateResponseInterceptor, defaultResponseInterceptor, errorMessageResponseInterceptor, RequestClient, } from '@vben/request'; + +import { useAppConfig } from '@vben/hooks'; +import { preferences } from '@vben/preferences'; import { useAccessStore } from '@vben/stores'; import { cloneDeep } from '@vben/utils'; From 97ec9d68ee5a65ae61e13fabc144f9e8dd5509f6 Mon Sep 17 00:00:00 2001 From: eric Date: Fri, 6 Feb 2026 14:12:12 +0800 Subject: [PATCH 6/6] fix: format --- playground/src/api/request.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/playground/src/api/request.ts b/playground/src/api/request.ts index 9c59ceafe..4cd2ce56b 100644 --- a/playground/src/api/request.ts +++ b/playground/src/api/request.ts @@ -2,15 +2,15 @@ * 该文件可自行根据业务逻辑进行调整 */ import type { AxiosResponseHeaders, RequestClientOptions } from '@vben/request'; + +import { useAppConfig } from '@vben/hooks'; +import { preferences } from '@vben/preferences'; import { authenticateResponseInterceptor, defaultResponseInterceptor, errorMessageResponseInterceptor, RequestClient, } from '@vben/request'; - -import { useAppConfig } from '@vben/hooks'; -import { preferences } from '@vben/preferences'; import { useAccessStore } from '@vben/stores'; import { cloneDeep } from '@vben/utils';