user.go 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. package main
  2. import (
  3. "errors"
  4. "sparrow/pkg/models"
  5. )
  6. // ErrUserNameExists 用户名已经存在
  7. var ErrUserNameExists = errors.New("用户名已经存在")
  8. // ErrPhoneExists 手机号已经存在
  9. var ErrPhoneExists = errors.New("手机号已经被注册过")
  10. // ErrEmailExists Email地址已经被注册
  11. var ErrEmailExists = errors.New("Email地址已经被使用")
  12. // ErrNameOrPassError 登录失败
  13. var ErrNameOrPassError = errors.New("用户名或密码不正确")
  14. // Login 用户登录
  15. func (r *Registry) Login(args *models.LoginRequest, reply *models.User) error {
  16. db, err := getDB()
  17. if err != nil {
  18. return err
  19. }
  20. err = db.Where("(user_name = ? or phone = ? or email = ?) AND user_pass = ?",
  21. args.UserName, args.UserName, args.UserName, mdd(args.Password)).First(&reply).Error
  22. if err != nil {
  23. return err
  24. }
  25. if reply.ID == 0 {
  26. return ErrNameOrPassError
  27. }
  28. return nil
  29. }
  30. // Register 用户注册
  31. func (r *Registry) Register(args *models.User, reply *models.User) error {
  32. db, err := getDB()
  33. if err != nil {
  34. return err
  35. }
  36. err = checkUserExists(args.UserName, args.Phone, args.Email)
  37. if err != nil {
  38. return err
  39. }
  40. args.UserKey, err = r.keygen.GenRandomKey(args.ID)
  41. if err != nil {
  42. return err
  43. }
  44. args.UserPass = mdd(args.UserPass)
  45. err = db.Save(args).Error
  46. if err != nil {
  47. return err
  48. }
  49. return nil
  50. }
  51. //ModifyPass 修改密码
  52. func (r *Registry) ModifyPass(userid uint, pass string, reply *models.User) error {
  53. db, err := getDB()
  54. if err != nil {
  55. return err
  56. }
  57. pass = mdd(pass)
  58. err = db.Model(&reply).Where(userid).Update("user_pass", pass).Error
  59. if err != nil {
  60. return err
  61. }
  62. return nil
  63. }
  64. //SendVerifyCode 发送手机验证码
  65. //check username, phone or email exists
  66. func checkUserExists(name, phone, email string) error {
  67. db, err := getDB()
  68. if err != nil {
  69. return err
  70. }
  71. reply := &models.User{}
  72. db.Find(reply, map[string]interface{}{"user_name": name})
  73. if reply.ID != 0 {
  74. return ErrUserNameExists
  75. }
  76. db.First(reply, map[string]interface{}{"phone": phone})
  77. if reply.ID != 0 {
  78. return ErrPhoneExists
  79. }
  80. db.First(reply, map[string]interface{}{"email": email})
  81. if reply.ID != 0 {
  82. return ErrEmailExists
  83. }
  84. return nil
  85. }