From c5983abe35d51778a3fab3795618ad3ba66d1be9 Mon Sep 17 00:00:00 2001 From: hh <2587203630@qq.com> Date: Mon, 13 Jul 2026 16:34:27 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BC=98=E5=8C=96=E8=AE=A4=E8=AF=81?= =?UTF-8?q?=E5=BC=82=E5=B8=B8=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- core/frontend/src/api.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/frontend/src/api.ts b/core/frontend/src/api.ts index a961bc7..88f8f99 100644 --- a/core/frontend/src/api.ts +++ b/core/frontend/src/api.ts @@ -48,6 +48,11 @@ const API_BASE = import.meta.env.VITE_API_BASE_URL || ""; const TOKEN_KEY = "airshelf_token"; const REMEMBER_KEY = "airshelf_remember"; // { username, expireAt } · 勾选「记住我 7 天」时写 const REMEMBER_DAYS = 7; +const AUTH_MISSING_MESSAGES = new Set([ + "身份认证信息未提供。", + "Authentication credentials were not provided." +]); +const FRIENDLY_AUTH_MISSING_MESSAGE = "登录状态异常,请刷新页面后重新登录;若仍无法操作,请联系管理员。"; export type RememberInfo = { username: string; expireAt: number }; @@ -122,6 +127,11 @@ async function request(path: string, options: RequestInit = {}): Promise { // 非 JSON(如 DEBUG 的整页 HTML 报错栈):绝不把整页怼进 toast(会撑爆 / 白屏),只给状态行 message = `服务器错误 ${response.status} ${response.statusText}`.trim(); } + // 后端默认的“身份认证信息未提供”只描述技术原因,用户无法判断该怎么处理。 + // 仅翻译这一种“根本没有携带凭证”的响应;无效 token 等其他认证错误仍保留原始提示,方便区分。 + if (response.status === 401 && AUTH_MISSING_MESSAGES.has(message)) { + message = FRIENDLY_AUTH_MISSING_MESSAGE; + } throw new ApiError(response.status, message); } if (response.status === 204) return undefined as T;