From 34cb51e0372170b55d9a28172c59b2e519b8a3f8 Mon Sep 17 00:00:00 2001 From: Jafeng <2998840497@qq.com> Date: Wed, 12 Nov 2025 10:04:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=E6=B3=A8=E5=86=8C=E6=8F=90=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/features/auth/pages/RegisterPage.vue | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/apps/frontend/src/features/auth/pages/RegisterPage.vue b/apps/frontend/src/features/auth/pages/RegisterPage.vue index 07efa02..82a0881 100644 --- a/apps/frontend/src/features/auth/pages/RegisterPage.vue +++ b/apps/frontend/src/features/auth/pages/RegisterPage.vue @@ -34,6 +34,15 @@ const submit = async () => { return; } + // 基础密码强度校验,避免命中后端 400 + const hasUpper = /[A-Z]/.test(form.password); + const hasNumber = /[0-9]/.test(form.password); + const hasSpecial = /[^A-Za-z0-9]/.test(form.password); + if (form.password.length < 8 || !hasUpper || !hasNumber || !hasSpecial) { + errorMessage.value = '密码需至少8位,且包含大写字母、数字和特殊字符'; + return; + } + isLoading.value = true; errorMessage.value = ''; try { @@ -51,6 +60,18 @@ const submit = async () => { console.warn('register failed', err); const status = err?.response?.status as number | undefined; const backendMsg = err?.response?.data?.message as string | undefined; + const fieldErrors = err?.response?.data?.errors as Record | undefined; + // 展示后端字段级错误(Zod) + if (fieldErrors) { + const pick = (...keys: string[]) => keys.flatMap((k) => fieldErrors[k] ?? []); + const messages = + pick('displayName', 'email', 'password', 'confirmPassword')[0] || + Object.values(fieldErrors).flat()[0]; + if (messages) { + errorMessage.value = messages; + return; + } + } if (!status) { errorMessage.value = '无法连接服务器,请检查网络或 API 地址配置。'; } else if (status === 409) {