问题描述
登录页(以及注册、忘记密码页)中,用户输入的邮箱/手机号如果带有前后空格(常见于移动端自动补全、复制粘贴),提交时会原样发给服务端,导致登录报 Invalid email 等错误,用户很难察觉是空格问题。
具体未 trim 的提交路径(packages/auth):
LoginForm.tsx — 密码模式 signIn(email, password)、手机号判定 looksLikePhoneIdentifier(email)、SSO 路径 POST /sign-in/sso 的 { email };
RegisterForm.tsx — signUp(name, email, password) 的 email;
ForgotPasswordForm.tsx — 邮箱分支 forgotPassword(email)。
(手机 OTP 相关路径已有 phone.trim(),不受影响。)
方案描述
在各表单提交处统一对邮箱/手机号标识符做 trim() 后再消费(校验、路由判定、发请求),输入框内保持用户原始输入不变:
LoginForm.handleSubmit:取 identifier = email.trim(),后续 looksLikePhoneIdentifier / signInWithPhonePassword / signIn 均用 trim 后的值;handleSso 同样用 trim 后的 email;
RegisterForm.handleSubmit:signUp 传 email.trim()(onVerificationRequired 回调同样传 trim 后的值);
ForgotPasswordForm.handleSubmit:forgotPassword(email.trim())。
补充单元测试:带前后空格的邮箱可正常登录/注册/发送重置邮件,且发出的值已去除空格。
问题描述
登录页(以及注册、忘记密码页)中,用户输入的邮箱/手机号如果带有前后空格(常见于移动端自动补全、复制粘贴),提交时会原样发给服务端,导致登录报
Invalid email等错误,用户很难察觉是空格问题。具体未 trim 的提交路径(
packages/auth):LoginForm.tsx— 密码模式signIn(email, password)、手机号判定looksLikePhoneIdentifier(email)、SSO 路径POST /sign-in/sso的{ email };RegisterForm.tsx—signUp(name, email, password)的 email;ForgotPasswordForm.tsx— 邮箱分支forgotPassword(email)。(手机 OTP 相关路径已有
phone.trim(),不受影响。)方案描述
在各表单提交处统一对邮箱/手机号标识符做
trim()后再消费(校验、路由判定、发请求),输入框内保持用户原始输入不变:LoginForm.handleSubmit:取identifier = email.trim(),后续looksLikePhoneIdentifier/signInWithPhonePassword/signIn均用 trim 后的值;handleSso同样用 trim 后的 email;RegisterForm.handleSubmit:signUp传email.trim()(onVerificationRequired回调同样传 trim 后的值);ForgotPasswordForm.handleSubmit:forgotPassword(email.trim())。补充单元测试:带前后空格的邮箱可正常登录/注册/发送重置邮件,且发出的值已去除空格。