user.go 2.4 KB

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