From 6c18c57e7ad840295b59c41e064c10a866d96433 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Fri, 7 Aug 2026 06:48:20 -0600 Subject: [PATCH] =?UTF-8?q?fix(=E9=98=B6=E6=AE=B53):=20api2=20=E8=A1=A5?= =?UTF-8?q?=E4=B8=8A=E9=89=B4=E6=9D=83=E5=A4=B1=E8=B4=A5=E7=9A=84=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E5=A4=84=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit utils/http.ts 的拦截器一直有两条全站行为:login-required 清登录态并弹登录框、 permission-denied 弹提示。api2 从建包起就漏了这两条,于是此前已迁移到 api2 的 所有端点在鉴权失败时都是「点了没反应」—— 调用方各自 catch 才能提示,漏一个 就静默。 新加的两个统计端点是教师专属,非教师点「统计」必然 403,会把这个洞放大到 用户能天天撞见,所以一并补上。 Co-Authored-By: Claude Opus 5 --- apps/web/src/utils/api2.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/web/src/utils/api2.ts b/apps/web/src/utils/api2.ts index a0ca9ba..be817be 100644 --- a/apps/web/src/utils/api2.ts +++ b/apps/web/src/utils/api2.ts @@ -1,5 +1,11 @@ import axios, { type AxiosRequestConfig } from "axios" +import { createDiscreteApi } from "naive-ui" +import { useAuthModalStore } from "shared/store/authModal" +import { STORAGE_KEY } from "./constants" import type { ApiResponse } from "./http" +import storage from "./storage" + +const { message: toast } = createDiscreteApi(["message"]) interface Api2Error { error?: { @@ -51,6 +57,16 @@ instance.interceptors.response.use( : code === "account-disabled" ? "Your account has been disabled" : message + + // 与 utils/http.ts 的拦截器保持一致:这两种错误全站都是同样的处理, + // 不放在这里的话每个调用点都得自己 catch,漏一个就是「点了没反应」。 + if (code === "login-required") { + storage.remove(STORAGE_KEY.AUTHED) + useAuthModalStore().openLoginModal() + } else if (code === "permission-denied") { + toast.error(legacyMessage || "权限不足") + } + return Promise.reject({ error: code, data: legacyMessage }) }, )