fix: 修复双Token自动刷新链路
All checks were successful
Build and Deploy TenantUI / build-and-deploy (push) Successful in 53s

This commit is contained in:
2026-02-26 14:46:52 +08:00
parent 8980eeedf5
commit bb4bbfc3fc
4 changed files with 28 additions and 2 deletions

View File

@@ -1,3 +1,5 @@
import type { RequestClientConfig } from '@vben/request';
import { baseRequestClient, requestClient } from '#/api/request'; import { baseRequestClient, requestClient } from '#/api/request';
export namespace AuthApi { export namespace AuthApi {
@@ -53,10 +55,14 @@ export async function loginApi(data: AuthApi.LoginParams) {
/** /**
* 刷新accessToken * 刷新accessToken
*/ */
export async function refreshTokenApi(data: AuthApi.RefreshTokenParams) { export async function refreshTokenApi(
data: AuthApi.RefreshTokenParams,
config?: RequestClientConfig,
) {
return baseRequestClient.post<AuthApi.ApiResponse<AuthApi.LoginResult>>( return baseRequestClient.post<AuthApi.ApiResponse<AuthApi.LoginResult>>(
'/auth/refresh', '/auth/refresh',
data, data,
config,
); );
} }

View File

@@ -117,11 +117,27 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) {
throw new Error('refresh token is required'); throw new Error('refresh token is required');
} }
const headers: Record<string, string> = {
'Accept-Language': preferences.app.locale,
};
const { tenantCode, tenantId } = resolveTenantHeaderPayload();
if (tenantCode) {
headers[TENANT_CODE_HEADER_KEY] = tenantCode;
} else if (tenantId) {
headers[TENANT_ID_HEADER_KEY] = tenantId;
}
const resp = await refreshTokenApi({ const resp = await refreshTokenApi({
refreshToken: currentRefreshToken, refreshToken: currentRefreshToken,
}, {
headers,
}); });
const tokenData = resp?.data; const responseBody = (resp as any)?.data ?? resp;
const tokenData =
responseBody?.accessToken || responseBody?.refreshToken
? responseBody
: responseBody?.data;
const newAccessToken = tokenData?.accessToken; const newAccessToken = tokenData?.accessToken;
const newRefreshToken = tokenData?.refreshToken ?? currentRefreshToken; const newRefreshToken = tokenData?.refreshToken ?? currentRefreshToken;

View File

@@ -28,6 +28,8 @@ async function initApplication() {
app: { app: {
accessMode: 'backend', accessMode: 'backend',
defaultHomePath: '/dashboard/console', defaultHomePath: '/dashboard/console',
enableRefreshToken: true,
loginExpiredMode: 'modal',
}, },
}); });

View File

@@ -10,6 +10,8 @@ export const overridesPreferences = defineOverridesPreferences({
app: { app: {
accessMode: 'backend', accessMode: 'backend',
defaultHomePath: '/dashboard/console', defaultHomePath: '/dashboard/console',
enableRefreshToken: true,
loginExpiredMode: 'modal',
name: import.meta.env.VITE_APP_TITLE, name: import.meta.env.VITE_APP_TITLE,
}, },
theme: { theme: {