diff --git a/apps/web-antd/src/api/core/auth.ts b/apps/web-antd/src/api/core/auth.ts index 8393d45a8..54f16e996 100644 --- a/apps/web-antd/src/api/core/auth.ts +++ b/apps/web-antd/src/api/core/auth.ts @@ -17,12 +17,6 @@ export namespace AuthApi { expiresTime: number; } - /** 刷新 token 返回值 */ - export interface RefreshTokenResult { - data: string; - status: number; - } - /** 租户信息返回值 */ export interface TenantResult { id: number; @@ -49,14 +43,12 @@ export async function loginApi(data: AuthApi.LoginParams) { } /** 刷新 accessToken */ -export async function refreshTokenApi() { - // TODO @芋艿:refreshToken 传递 - return baseRequestClient.post('/system/auth/refresh', { - withCredentials: true, - }); +export async function refreshTokenApi(refreshToken: string) { + return baseRequestClient.post(`/system/auth/refresh-token?refreshToken=${refreshToken}`); } /** 退出登录 */ +// TODO @芋艿:有问题 baseRequestClient export async function logoutApi() { return baseRequestClient.post('/system/auth/logout', { withCredentials: true, diff --git a/apps/web-antd/src/api/request.ts b/apps/web-antd/src/api/request.ts index 5ce3afc68..be6382f21 100644 --- a/apps/web-antd/src/api/request.ts +++ b/apps/web-antd/src/api/request.ts @@ -50,9 +50,9 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) { */ async function doRefreshToken() { const accessStore = useAccessStore(); - debugger - const resp = await refreshTokenApi(); - const newToken = resp.data; + const refreshToken = accessStore.refreshToken as string; + const resp = await refreshTokenApi(refreshToken); + const newToken = resp?.data?.data?.accessToken; accessStore.setAccessToken(newToken); return newToken; } @@ -68,6 +68,7 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) { config.headers.Authorization = formatToken(accessStore.accessToken); config.headers['Accept-Language'] = preferences.app.locale; + // 添加租户编号 config.headers['tenant-id'] = tenantEnable ? accessStore.tenantId : undefined; return config; }, @@ -99,7 +100,8 @@ function createRequestClient(baseURL: string, options?: RequestClientOptions) { // 这里可以根据业务进行定制,你可以拿到 error 内的信息进行定制化处理,根据不同的 code 做不同的提示,而不是直接使用 message.error 提示 msg // 当前mock接口返回的错误字段是 error 或者 message const responseData = error?.response?.data ?? {}; - const errorMessage = responseData?.error ?? responseData?.message ?? ''; + const errorMessage = + responseData?.error ?? responseData?.message ?? responseData.msg ?? ''; // 如果没有错误信息,则会根据状态码进行提示 message.error(errorMessage || msg); }), @@ -113,3 +115,11 @@ export const requestClient = createRequestClient(apiURL, { }); export const baseRequestClient = new RequestClient({ baseURL: apiURL }); +baseRequestClient.addRequestInterceptor({ + fulfilled: (config) => { + const accessStore = useAccessStore(); + // 添加租户编号 + config.headers['tenant-id'] = tenantEnable? accessStore.tenantId : undefined; + return config; + }, +}); diff --git a/apps/web-antd/src/preferences.ts b/apps/web-antd/src/preferences.ts index 282dc73b1..71e7ba6bc 100644 --- a/apps/web-antd/src/preferences.ts +++ b/apps/web-antd/src/preferences.ts @@ -11,6 +11,6 @@ export const overridesPreferences = defineOverridesPreferences({ /** 后端路由模式 */ accessMode: 'backend', name: import.meta.env.VITE_APP_TITLE, - enableRefreshToken: false, // TODO @芋艿:后续跟进下 + enableRefreshToken: true }, }); diff --git a/packages/effects/request/src/request-client/preset-interceptors.ts b/packages/effects/request/src/request-client/preset-interceptors.ts index 71ddc74bd..e5c677abf 100644 --- a/packages/effects/request/src/request-client/preset-interceptors.ts +++ b/packages/effects/request/src/request-client/preset-interceptors.ts @@ -59,9 +59,9 @@ export const authenticateResponseInterceptor = ({ }): ResponseInterceptorConfig => { return { rejected: async (error) => { - const { config, response } = error; + const { config, response, data: responseData } = error; // 如果不是 401 错误,直接抛出异常 - if (response?.status !== 401) { + if (response?.status !== 401 && responseData.code !== 401) { throw error; } // 判断是否启用了 refreshToken 功能 @@ -131,7 +131,7 @@ export const errorMessageResponseInterceptor = ( } let errorMessage = ''; - const status = error?.response?.status; + const status = error?.code || error?.response?.data?.code || error?.response?.status; switch (status) { case 400: {