diff --git a/internal/common/auth/service/auth_service.go b/internal/common/auth/service/auth_service.go index 16e341d..e135d2c 100644 --- a/internal/common/auth/service/auth_service.go +++ b/internal/common/auth/service/auth_service.go @@ -4,6 +4,7 @@ import ( "context" "errors" "fmt" + "strings" "sync" "wx_service/internal/model" @@ -17,6 +18,8 @@ var ( ErrMiniProgramNotFound = errors.New("mini program not found") ) +const defaultAvatarURL = "https://linghu-wmr.oss-cn-beijing.aliyuncs.com/smt/avatar.png" + type AuthService struct { db *gorm.DB miniProgramSvc *MiniProgramService @@ -72,6 +75,8 @@ func (s *AuthService) LoginWithCode(ctx context.Context, req LoginRequest) (*Log return nil, fmt.Errorf("wechat response missing openid") } + avatarURL := normalizeAvatarURL(req.AvatarURL) + tx := s.db.WithContext(ctx) var user model.User err = tx.Where("mini_program_id = ? AND open_id = ?", miniProgram.ID, session.OpenID).First(&user).Error @@ -81,7 +86,7 @@ func (s *AuthService) LoginWithCode(ctx context.Context, req LoginRequest) (*Log OpenID: session.OpenID, UnionID: session.UnionID, NickName: req.NickName, - AvatarURL: req.AvatarURL, + AvatarURL: avatarURL, Phone: req.Phone, SessionKey: session.SessionKey, } @@ -105,9 +110,13 @@ func (s *AuthService) LoginWithCode(ctx context.Context, req LoginRequest) (*Log updates["nick_name"] = req.NickName user.NickName = req.NickName } - if req.AvatarURL != "" && req.AvatarURL != user.AvatarURL { - updates["avatar_url"] = req.AvatarURL - user.AvatarURL = req.AvatarURL + if req.AvatarURL != "" && avatarURL != user.AvatarURL { + updates["avatar_url"] = avatarURL + user.AvatarURL = avatarURL + } + if strings.TrimSpace(user.AvatarURL) == "" { + updates["avatar_url"] = defaultAvatarURL + user.AvatarURL = defaultAvatarURL } if req.Phone != "" && req.Phone != user.Phone { updates["phone"] = req.Phone @@ -147,3 +156,11 @@ func (s *AuthService) getWeChatClient(mp *model.MiniProgram) *WeChatClient { s.cacheMu.Unlock() return newClient } + +func normalizeAvatarURL(raw string) string { + text := strings.TrimSpace(raw) + if text == "" { + return defaultAvatarURL + } + return text +}