From 7594caaf0292313304d112b511da3b8f8693ee92 Mon Sep 17 00:00:00 2001 From: SaaS Frontend Date: Mon, 3 Aug 2026 12:40:39 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(auth):=20401=E6=8B=A6=E6=88=AA=E5=99=A8?= =?UTF-8?q?=E6=8E=92=E9=99=A4auth=E7=AB=AF=E7=82=B9=20+=20login=E9=BB=98?= =?UTF-8?q?=E8=AE=A4=E8=B7=B3=E8=BD=AC/app/dashboard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - client.ts: 401响应拦截器增加isAuthEndpoint判断,排除/auth/login、 /auth/register、/auth/forgot-password、/auth/reset-password, 避免登录密码错误时触发clearAuth+硬跳转,让401正常走错误提示逻辑 - useAuth.ts: login()默认跳转路径从'/'改为'/app/dashboard', 与Login.tsx onFinish保持一致,消除双重navigate竞态 Closes #1221 --- apps/web/src/api/client.ts | 16 +++++++++++++++- apps/web/src/hooks/useAuth.ts | 4 ++-- 2 files changed, 17 insertions(+), 3 deletions(-) mode change 100644 => 100755 apps/web/src/api/client.ts mode change 100644 => 100755 apps/web/src/hooks/useAuth.ts diff --git a/apps/web/src/api/client.ts b/apps/web/src/api/client.ts old mode 100644 new mode 100755 index 389a76ec8..6f1aa2a5c --- a/apps/web/src/api/client.ts +++ b/apps/web/src/api/client.ts @@ -57,7 +57,21 @@ apiClient.interceptors.response.use( } // 401 → 尝试刷新 Token - if (error.response?.status === 401 && originalRequest && !originalRequest._retry) { + // 排除 auth 端点:登录/注册/找回密码的 401 是正常业务响应(如密码错误), + // 不应触发 token 刷新或登出跳转,走后面的错误提示逻辑即可 + const requestUrl = originalRequest?.url || "" + const isAuthEndpoint = + requestUrl.includes("/auth/login") || + requestUrl.includes("/auth/register") || + requestUrl.includes("/auth/forgot-password") || + requestUrl.includes("/auth/reset-password") + + if ( + error.response?.status === 401 && + originalRequest && + !originalRequest._retry && + !isAuthEndpoint + ) { const refreshToken = useAuthStore.getState().refreshToken // 无 refresh_token → 直接登出 diff --git a/apps/web/src/hooks/useAuth.ts b/apps/web/src/hooks/useAuth.ts old mode 100644 new mode 100755 index 5e620e3b0..5fa6ba802 --- a/apps/web/src/hooks/useAuth.ts +++ b/apps/web/src/hooks/useAuth.ts @@ -31,8 +31,8 @@ export const useLogin = () => { const user = await authApi.getCurrentUser() setAuth(user, data.access_token, refreshToken) - // 跳转到登录前页面或首页 - const redirect = localStorage.getItem("login_redirect") || "/" + // 跳转到登录前页面或仪表盘(与 Login.tsx onFinish 保持一致) + const redirect = localStorage.getItem("login_redirect") || "/app/dashboard" localStorage.removeItem("login_redirect") navigate(redirect, { replace: true }) return data -- 2.54.0 From 08179d1369f099eb4e2b051f0f4189580a6e0867 Mon Sep 17 00:00:00 2001 From: xiaoxia Date: Mon, 3 Aug 2026 13:57:10 +0800 Subject: [PATCH 2/2] fix(ci): strip ANSI codes before grep in vitest_incremental.sh vitest outputs ANSI color codes that interfere with grep matching. 'No test files found' skip logic was not triggered, causing CI failure. Added sed to strip ANSI codes before grep check. Closes #1221 --- scripts/ci/vitest_incremental.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/scripts/ci/vitest_incremental.sh b/scripts/ci/vitest_incremental.sh index 7c5e73c59..cef424ae5 100755 --- a/scripts/ci/vitest_incremental.sh +++ b/scripts/ci/vitest_incremental.sh @@ -55,9 +55,19 @@ echo "" # 在Docker Node容器中执行增量测试 set +e -bash scripts/ci/step_frontend_run.sh "npx vitest run related $CHANGED_FILES" +VITEST_OUTPUT=$(bash scripts/ci/step_frontend_run.sh "npx vitest run related $CHANGED_FILES" 2>&1) VITEST_EXIT=$? set -e +echo "$VITEST_OUTPUT" + +# 如果没有找到测试文件,视为通过(改动的文件没有对应测试) +# 先用 sed 去掉 ANSI 转义码,避免干扰 grep 匹配 +CLEAN_OUTPUT=$(echo "$VITEST_OUTPUT" | sed 's/\x1b\[[0-9;]*m//g') +if echo "$CLEAN_OUTPUT" | grep -q "No test files found"; then + echo "" + echo "⚠️ 未找到相关测试文件,跳过(非失败)" + exit 0 +fi if [ "$VITEST_EXIT" -eq 0 ]; then echo "" -- 2.54.0