package main import ( "errors" "sparrow/pkg/models" "sparrow/pkg/rpcs" ) // ErrUserNameExists 用户名已经存在 var ErrUserNameExists = errors.New("用户名已经存在") // ErrPhoneExists 手机号已经存在 var ErrPhoneExists = errors.New("手机号已经被注册过") // ErrEmailExists Email地址已经被注册 var ErrEmailExists = errors.New("Email地址已经被使用") // ErrNameOrPassError 登录失败 var ErrNameOrPassError = errors.New("用户名或密码不正确") // Login 用户登录 func (r *Registry) Login(args *models.LoginRequest, reply *models.User) error { db, err := getDB() if err != nil { return err } err = db.Where("(user_name = ? or phone = ? or email = ?) AND user_pass = ?", args.UserName, args.UserName, args.UserName, mdd(args.Password)).First(&reply).Error if err != nil { return err } if reply.ID == 0 { return ErrNameOrPassError } return nil } // Register 用户注册 func (r *Registry) Register(args *models.User, reply *models.User) error { db, err := getDB() if err != nil { return err } err = checkUserExists(args.UserName, args.Phone, args.Email) if err != nil { return err } args.UserKey, err = r.keygen.GenRandomKey(args.ID) if err != nil { return err } args.UserPass = mdd(args.UserPass) err = db.Save(args).Error if err != nil { return err } reply = args return nil } //ModifyPass 修改密码 func (r *Registry) ModifyPass(args *rpcs.ArgsUserModifyPass, reply *models.User) error { db, err := getDB() if err != nil { return err } pass := mdd(args.NewPass) oldpass := mdd(args.OldPass) var count int err = db.Model(&reply).Where(map[string]interface{}{ "id": args.UserID, "user_pass": oldpass, }).Update("user_pass", pass).Count(&count).Error if err != nil { return ErrNameOrPassError } if count == 0 { return ErrNameOrPassError } return nil } //SendVerifyCode 发送手机验证码 //check username, phone or email exists func checkUserExists(name, phone, email string) error { db, err := getDB() if err != nil { return err } reply := &models.User{} db.First(reply, map[string]interface{}{"user_name": name}) if reply.ID != 0 { return ErrUserNameExists } db.First(reply, map[string]interface{}{"phone": phone}) if reply.ID != 0 { return ErrPhoneExists } db.First(reply, map[string]interface{}{"email": email}) if reply.ID != 0 { return ErrEmailExists } return nil }