fix 修复 登录页后端403会出现多个弹窗问题

This commit is contained in:
疯狂的狮子Li 2026-06-11 13:17:19 +08:00
parent 565564a8a3
commit 9bcb8a9f27
2 changed files with 17 additions and 2 deletions

View File

@ -26,6 +26,18 @@ export interface RequestConfig<D = unknown> extends AxiosRequestConfig<D> {
export const isRelogin = { show: false }; export const isRelogin = { show: false };
type HandledRequestError = Error & { isHandled?: boolean };
function createHandledError(message: string) {
const error = new Error(message) as HandledRequestError;
error.isHandled = true;
return error;
}
export function isHandledRequestError(error: unknown) {
return Boolean((error as { isHandled?: boolean } | undefined)?.isHandled);
}
export function globalHeaders() { export function globalHeaders() {
return { return {
Authorization: `Bearer ${getToken() || ''}`, Authorization: `Bearer ${getToken() || ''}`,
@ -196,7 +208,7 @@ service.interceptors.response.use(
} }
}); });
} }
return Promise.reject(new Error('无效的会话,或者会话已过期,请重新登录。')); return Promise.reject(createHandledError('无效的会话,或者会话已过期,请重新登录。'));
} }
if (code === SERVER_ERROR || code === WARN || code !== SUCCESS) { if (code === SERVER_ERROR || code === WARN || code !== SUCCESS) {

View File

@ -10,6 +10,7 @@ import dayjs from 'dayjs';
import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react'; import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react';
import type { RuntimeMenuItem } from '@/api/types'; import type { RuntimeMenuItem } from '@/api/types';
import { logout } from '@/api/login'; import { logout } from '@/api/login';
import { isHandledRequestError } from '@/api/request';
import defaultAvatar from '@/assets/images/profile.jpg'; import defaultAvatar from '@/assets/images/profile.jpg';
import appLogo from '@/assets/logo/logo.png'; import appLogo from '@/assets/logo/logo.png';
import ExternalLinkButton from '@/components/layout/ExternalLinkButton'; import ExternalLinkButton from '@/components/layout/ExternalLinkButton';
@ -81,7 +82,9 @@ export default function BasicLayout() {
} }
}) })
.catch(error => { .catch(error => {
if (!isHandledRequestError(error)) {
message.error(error.message || '加载用户信息失败'); message.error(error.message || '加载用户信息失败');
}
closePush(); closePush();
pushStartedRef.current = false; pushStartedRef.current = false;
removeToken(); removeToken();