feat(auth): 账号名必须是纯中文,唯一例外是管理员账号 admin
站长要求:账号名除了 admin 其它都必须是中文名。 原来「只能包含汉字」的校验散在 5 个写入路径上,而且**没有 admin 例外** —— 导致连 admin 账号自己都编辑不了(改任何字段都撞「姓名和用户名只能包含汉字」)。 - 新增 server/utils/username.ts:规则一处定义 · isValidUsername:纯中文,或恰好是 admin · isValidPersonName:姓名纯中文,但 admin 账号的姓名不做限制 · 统一提示文案(接口报错与客户端提示共用同一句) - 5 个写入路径全部改用它,并删掉各自的 chineseRegex: admin/users 新建、admin/users 编辑、admin/users 批量导入、auth/register、user/profile - 注册时明确拒绝 admin(系统保留账号) 已验证:两端规则对 9 个用例结论完全一致;5 处均无旧正则; admin 可编辑,拼音名(zhangsan / zhang.san / 张三1 / 带空格)一律被拦。
This commit is contained in:
@@ -1,4 +1,5 @@
|
||||
import { createError, defineEventHandler, getRouterParam, readBody } from 'h3'
|
||||
import { isValidPersonName, isValidUsername, NAME_RULE_MESSAGE, USERNAME_RULE_MESSAGE } from '~~/server/utils/username'
|
||||
import { db } from '~/drizzle/db'
|
||||
import { users, userStatusLogs } from '~/drizzle/schema'
|
||||
import { eq } from 'drizzle-orm'
|
||||
@@ -28,12 +29,11 @@ export default defineEventHandler(async (event) => {
|
||||
})
|
||||
}
|
||||
|
||||
// 验证姓名和用户名只能包含汉字
|
||||
const chineseRegex = /^[\u4e00-\u9fa5]+$/
|
||||
if (!chineseRegex.test(name) || !chineseRegex.test(username)) {
|
||||
// 账号名必须是纯中文;**admin 账号例外**(以前没有例外,连它自己都编辑不了)
|
||||
if (!isValidPersonName(name, username) || !isValidUsername(username)) {
|
||||
throw createError({
|
||||
statusCode: 400,
|
||||
statusMessage: '姓名和用户名只能包含汉字'
|
||||
statusMessage: NAME_RULE_MESSAGE + ';' + USERNAME_RULE_MESSAGE
|
||||
})
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user