feat: 完成头像上传、站点主题配置与UI优化
- 新增附件模型与上传服务,拆分头像上传/管理逻辑 - 重构用户资料接口,移除直接修改头像字段,改用专用上传接口 - 添加站点公开设置API与管理员外观配置页 - 全局替换hover背景为accent-soft,优化交互一致性 - 完善头像组件,支持图片加载失败回退与src更新重置 - 新增用户状态事件总线,解决同页头像更新不及时问题 - 调整依赖包顺序与CI依赖版本 - 重构板块列表接口,新增帖子计数 - 迁移账号设置到用户主页tab,合并重复代码
This commit is contained in:
@@ -493,12 +493,12 @@ func (s *AuthService) ChangePassword(userID uint, oldPassword, newPassword strin
|
||||
return s.IncrementTokenVersion(userID)
|
||||
}
|
||||
|
||||
// UpdateProfile 更新用户资料(昵称、头像、邮箱、签名)
|
||||
// UpdateProfile 更新昵称/邮箱/签名。头像只能通过上传接口(/api/upload/avatar)
|
||||
// 或历史头像选用接口(/api/avatar/use)修改,这里不接收头像字段,防止写入任意外链。
|
||||
// - nickname 非空且不超过 64 字符
|
||||
// - email 可为空;非空时需符合邮箱格式且不与他人重复
|
||||
// - avatar 可为空 URL
|
||||
// - signature 不超过 255 字符
|
||||
func (s *AuthService) UpdateProfile(userID uint, nickname, avatar, email, signature string) (*model.User, error) {
|
||||
func (s *AuthService) UpdateProfile(userID uint, nickname, email, signature string) (*model.User, error) {
|
||||
nickname = strings.TrimSpace(nickname)
|
||||
if nickname == "" {
|
||||
return nil, errors.New("昵称不能为空")
|
||||
@@ -518,16 +518,12 @@ func (s *AuthService) UpdateProfile(userID uint, nickname, avatar, email, signat
|
||||
return nil, errors.New("该邮箱已被使用")
|
||||
}
|
||||
}
|
||||
if len(avatar) > 512 {
|
||||
return nil, errors.New("头像链接过长")
|
||||
}
|
||||
if len(signature) > 255 {
|
||||
return nil, errors.New("签名不能超过 255 个字符")
|
||||
}
|
||||
|
||||
updates := map[string]any{
|
||||
"nickname": nickname,
|
||||
"avatar": avatar,
|
||||
"email": email,
|
||||
"signature": signature,
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user