package logic import ( "context" "slowwild/internal/svc" "slowwild/internal/errorx" "slowwild/internal/model" "slowwild/internal/utils" "git.banshen.xyz/huangguangrong/slow_wild_protobuff/slowwild/slowwildserver" "github.com/zeromicro/go-zero/core/logx" ) type LoginLogic struct { ctx context.Context svcCtx *svc.ServiceContext logx.Logger } func NewLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginLogic { return &LoginLogic{ ctx: ctx, svcCtx: svcCtx, Logger: logx.WithContext(ctx), } } // 用户登录 func (l *LoginLogic) Login(in *slowwildserver.LoginReq) (*slowwildserver.LoginAndRegisterRsp, error) { if in.Phone == "" { return nil, errorx.ErrInvalidParam } var user *model.User var err error // 查询用户是否存在 user, err = l.svcCtx.UserModel.FindOneByPhone(l.ctx, in.Phone) if err == model.ErrNotFound { return nil, errorx.ErrUserNotFound } if err != nil { return nil, errorx.ErrUserQueryFailed } // 根据登录方式验证 if in.LoginType == 1 { // 验证码登录 if in.Code == "" { return nil, errorx.ErrInvalidParam } // TODO: 验证验证码 // if !verifyCode(in.Phone, in.Code) { // return nil, errorx.NewCodeError(10004, "验证码错误") // } } else if in.LoginType == 2 { // 密码登录 if in.Password == "" { return nil, errorx.ErrInvalidParam } // 验证密码 if !verifyPassword(user.Password, user.Salt, in.Password) { return nil, errorx.NewCodeError(10005, "密码错误") } } else { return nil, errorx.ErrInvalidParam } // 生成token token, err := utils.GenerateToken(user.ID) if err != nil { return nil, errorx.NewCodeError(10006, "生成token失败") } // 更新最后登录IP err = l.svcCtx.UserModel.UpdateLoginIP(l.ctx, user.ID, in.LoginIp) if err != nil { l.Logger.Errorf("更新登录IP失败: %v", err) } return &slowwildserver.LoginAndRegisterRsp{ Token: token, }, nil } // 验证密码 func verifyPassword(dbPassword, salt, inputPassword string) bool { return dbPassword == utils.EncryptPassword(inputPassword, salt) }