user.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package model
  2. import (
  3. "context"
  4. "errors"
  5. "fmt"
  6. "icloudapp.cn/tools/entity"
  7. _ "icloudapp.cn/tools/repository/mysql"
  8. "icloudapp.cn/tools/service"
  9. "icloudapp.cn/tools/util"
  10. "time"
  11. )
  12. type User struct {
  13. ctx context.Context
  14. }
  15. func NewUser(ctx context.Context) *User {
  16. return &User{ctx}
  17. }
  18. // Login 用户名 密码登录
  19. func (u *User) Login(username, password string) (entity.Login, error) {
  20. var login entity.Login
  21. sUser := service.NewUser(u.ctx)
  22. userInfo, err := sUser.UserInfoByUsername(username)
  23. if err != nil {
  24. return login, err
  25. }
  26. signedPassword := util.Sign(password, userInfo.Salt)
  27. //密码对不上就返回空login
  28. if userInfo.Password != signedPassword {
  29. return login, errors.New("密码不匹配")
  30. }
  31. /*encodeStr := url.HttpBuildQuery(map[string]string{
  32. "uid": strconv.FormatInt(userInfo.Uid, 10),
  33. "username": userInfo.Username,
  34. })
  35. token, _ := util.EncryptWidthTime(encodeStr, setting.Conf.EncryptConfig.ExpireAt, setting.Conf.EncryptConfig.Key)
  36. */
  37. token, _ := service.GenJWTToken(userInfo.Uid, userInfo.Username)
  38. login.Uid = userInfo.Uid
  39. login.Username = userInfo.Username
  40. login.Status = userInfo.Status
  41. login.Avatar = userInfo.Avatar
  42. login.Type = 1
  43. login.Token = token
  44. login.Expire = time.Now().Add(service.JWTExpireDuration()).Unix()
  45. login.ExpiresAt = time.Unix(login.Expire, 0)
  46. return login, nil
  47. }
  48. // Register 通过用户名、密码或邮箱注册
  49. func (u *User) Register(username, password, email string) (entity.UserInfo, error) {
  50. var register entity.User
  51. register.Username = username
  52. register.Salt = util.RandomNumberStr(4)
  53. register.Password = util.Sign(password, register.Salt)
  54. if email == "" {
  55. email = fmt.Sprintf("%s@travelzs.com", username)
  56. }
  57. register.Email = email
  58. register.Status = 1
  59. register.CreateAt = time.Now()
  60. register.UpdateAt = time.Now()
  61. sUser := service.NewUser(u.ctx)
  62. return sUser.Register(register)
  63. }
  64. func (u *User) Info(uid int64) (entity.UserInfo, error) {
  65. sUser := service.NewUser(u.ctx)
  66. return sUser.UserInfoByID(uid)
  67. }
  68. // ChangePassword 通过uid修改密码
  69. func (u *User) ChangePassword(uid int64, password string) (entity.UserInfo, error) {
  70. sUser := service.NewUser(u.ctx)
  71. salt := util.RandomNumberStr(4)
  72. password = util.Sign(password, salt)
  73. return sUser.ChangePassword(uid, password, salt)
  74. }
  75. // ChangeEmail 更新邮件地址
  76. func (u *User) ChangeEmail(uid int64, email string) (entity.UserInfo, error) {
  77. sUser := service.NewUser(u.ctx)
  78. return sUser.ChangeEmail(uid, email)
  79. }