- 用户名校验改用白名单正则(中英文/数字/下划线/连字符),字符数计法统一 - 简介→个性签名,新增 textarea 可编辑,上限 128 字符 - 用户名+签名各增加实时字符计数器(x/16、x/128) - API 合并为 PUT /api/settings/profile,一次提交两字段,按变更写入 - Toast 移至 NAV 下方,独立样式,5 秒自动消失 - 移除用户 ID 灰色底色,提示改为「个人资料已更新」 - 纯文本存储 + Go 模板自动转义防 XSS
26 lines
1.4 KiB
Go
26 lines
1.4 KiB
Go
package common
|
||
|
||
import "errors"
|
||
|
||
// 认证相关错误哨兵(统一存放,避免 service 和 middleware 交叉引用)
|
||
var (
|
||
ErrEmailExists = errors.New("该邮箱已注册")
|
||
ErrUsernameTaken = errors.New("该用户名已被占用")
|
||
ErrUsernameInvalid = errors.New("用户名格式无效(支持中英文、数字、下划线、连字符,1-16个字符)")
|
||
ErrBioTooLong = errors.New("个性签名不能超过 128 个字符")
|
||
ErrInvalidCred = errors.New("邮箱或密码错误")
|
||
ErrUserNotFound = errors.New("用户不存在")
|
||
ErrUserBanned = errors.New("该账号已被封禁")
|
||
ErrUserDeleted = errors.New("该账号已申请注销,登录即自动恢复")
|
||
// 统一返回,避免泄露用户存在性、软删除状态等内部信息
|
||
ErrUserLocked = errors.New("邮箱或密码错误")
|
||
ErrWeakPassword = errors.New("密码需至少 8 位,且包含字母和数字")
|
||
ErrTokenExpired = errors.New("登录已过期,请重新登录")
|
||
ErrTokenInvalid = errors.New("无效的认证凭据")
|
||
ErrTokenRevoked = errors.New("登录凭证已失效,请重新登录")
|
||
ErrRateLimitAccount = errors.New("该账号登录尝试过于频繁")
|
||
ErrRateLimitIP = errors.New("请求过于频繁,请稍后重试")
|
||
ErrRateLimitRegisterIP = errors.New("注册请求过于频繁,请稍后重试")
|
||
ErrPermissionDenied = errors.New("权限不足")
|
||
)
|