diff --git a/apps/ops-web/src/lib/http.ts b/apps/ops-web/src/lib/http.ts index fb0f2e7..bb32118 100644 --- a/apps/ops-web/src/lib/http.ts +++ b/apps/ops-web/src/lib/http.ts @@ -43,9 +43,15 @@ const client: AxiosInstance = axios.create({ timeout: 30000, }) +function isLoginRequest(url: string | undefined, method: string | undefined): boolean { + return ( + method?.toLowerCase() === 'post' && (url === '/auth/login' || Boolean(url?.endsWith('/auth/login'))) + ) +} + client.interceptors.request.use((config) => { const { session } = readStoredSession() - if (session.accessToken) { + if (session.accessToken && !isLoginRequest(config.url, config.method)) { config.headers = config.headers ?? {} config.headers['Authorization'] = `Bearer ${session.accessToken}` } @@ -58,7 +64,7 @@ client.interceptors.response.use( const status = error.response?.status const payload = error.response?.data - if (status === 401) { + if (status === 401 && !isLoginRequest(error.config?.url, error.config?.method)) { clearStoredSession() onUnauthorized?.() } diff --git a/apps/ops-web/src/views/LoginView.vue b/apps/ops-web/src/views/LoginView.vue index 8dc584c..7fa06f7 100644 --- a/apps/ops-web/src/views/LoginView.vue +++ b/apps/ops-web/src/views/LoginView.vue @@ -146,7 +146,8 @@ function formatLoginError(error: unknown): string { login_guard_unavailable: '登录保护暂时不可用', } const message = messages[error.message] ?? error.message - return error.detail ? `${message},${error.detail}` : message + const detail = error.detail?.trim() + return detail && detail !== message ? `${message},${detail}` : message } if (error instanceof Error) { return error.message