37 lines
1.3 KiB
TypeScript
37 lines
1.3 KiB
TypeScript
import { getPasswordPolicyViolation } from './password-policy'
|
|
|
|
// OAuth 注册用户名规则
|
|
export const OAUTH_REGISTER_USERNAME_PATTERN = /^[a-zA-Z0-9_-]+$/
|
|
export const OAUTH_REGISTER_USERNAME_MIN_LENGTH = 3
|
|
export const OAUTH_REGISTER_USERNAME_MAX_LENGTH = 30
|
|
|
|
// 校验 OAuth 注册凭据,返回稳定错误码与中文兜底文案;通过时返回 null。
|
|
// 不依赖 useLocale,前端与服务端可安全共用;文案本地化由调用方按 code 完成。
|
|
export const validateOAuthRegisterCredentials = (
|
|
username: string,
|
|
password: string,
|
|
confirmPassword: string
|
|
): { code: string; message: string } | null => {
|
|
if (
|
|
username.length < OAUTH_REGISTER_USERNAME_MIN_LENGTH ||
|
|
username.length > OAUTH_REGISTER_USERNAME_MAX_LENGTH
|
|
) {
|
|
return { code: 'AUTH_USERNAME_LENGTH_INVALID', message: '用户名长度需要在3-30个字符之间' }
|
|
}
|
|
|
|
if (!OAUTH_REGISTER_USERNAME_PATTERN.test(username)) {
|
|
return { code: 'AUTH_USERNAME_PATTERN_INVALID', message: '用户名仅可包含英文、数字、下划线和连字符' }
|
|
}
|
|
|
|
const passwordViolation = getPasswordPolicyViolation(password)
|
|
if (passwordViolation) {
|
|
return passwordViolation
|
|
}
|
|
|
|
if (password !== confirmPassword) {
|
|
return { code: 'AUTH_REGISTER_PASSWORD_MISMATCH', message: '两次输入的密码不一致' }
|
|
}
|
|
|
|
return null
|
|
}
|