user.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. package controller
  2. import (
  3. "github.com/gin-gonic/gin"
  4. setting "icloudapp.cn/tools/config"
  5. "icloudapp.cn/tools/entity"
  6. tError "icloudapp.cn/tools/errors"
  7. "icloudapp.cn/tools/model"
  8. "icloudapp.cn/tools/service"
  9. "icloudapp.cn/tools/util"
  10. "time"
  11. )
  12. // Info 获取用户信息
  13. func Info(ctx *gin.Context) {
  14. uid := GetUID(ctx)
  15. if uid < 1 {
  16. entity.ResponseError(ctx, entity.CodeInvalidParam)
  17. return
  18. }
  19. mUser := model.NewUser(ctx)
  20. userInfo, err := mUser.Info(uid)
  21. if err != nil {
  22. entity.ResponseNormal(ctx, userInfo.Code, userInfo.Msg, nil)
  23. return
  24. }
  25. token := service.GetJWTTokenFromRedis(userInfo.Body.Uid)
  26. responseAPIData := entity.UserInfoAPIData{
  27. Uid: userInfo.Body.Uid,
  28. Username: userInfo.Body.Username,
  29. Type: 1,
  30. Status: userInfo.Body.Status,
  31. Token: token,
  32. Avatar: userInfo.Body.Avatar,
  33. }
  34. entity.ResponseSuccess(ctx, responseAPIData)
  35. }
  36. // Login 登录
  37. func Login(ctx *gin.Context) {
  38. var request entity.LoginRequest
  39. if err := ctx.ShouldBind(&request); err != nil {
  40. entity.ResponseError(ctx, entity.CodeInvalidParam)
  41. return
  42. }
  43. mUser := model.NewUser(ctx)
  44. loginInfo, err := mUser.Login(request.UserName, request.Password)
  45. if err != nil {
  46. entity.ResponseNormal(ctx, entity.CodeServerBusy, err.Error(), nil)
  47. return
  48. }
  49. if loginInfo.Uid < 1 {
  50. entity.ResponseNormal(ctx, entity.CodeDenied, "登录失败", []interface{}{})
  51. return
  52. }
  53. //设置cookie
  54. util.NewPosterCookie(ctx).SetCookie("poster_sid", loginInfo.Token, int(setting.Conf.JWTConfig.ExpireAt))
  55. entity.ResponseSuccess(ctx, loginInfo)
  56. }
  57. // Register 注册
  58. func Register(ctx *gin.Context) {
  59. var request entity.RegisterRequest
  60. if err := ctx.ShouldBind(&request); err != nil {
  61. entity.ResponseError(ctx, entity.CodeInvalidParam)
  62. return
  63. }
  64. mUser := model.NewUser(ctx)
  65. userInfo, err := mUser.Register(request.UserName, request.Password, request.Email)
  66. if err != nil {
  67. entity.ResponseNormal(ctx, userInfo.Code, err.Error(), entity.EmptyBodyObject())
  68. return
  69. }
  70. if userInfo.Code > 0 {
  71. entity.ResponseNormal(ctx, userInfo.Code, userInfo.Msg, entity.EmptyBodyObject())
  72. return
  73. }
  74. entity.ResponseSuccess(ctx, userInfo)
  75. }
  76. func ChangePassword(ctx *gin.Context) {
  77. var request entity.ChangePasswordRequest
  78. if err := ctx.ShouldBind(&request); err != nil {
  79. entity.ResponseError(ctx, entity.CodeInvalidParam)
  80. return
  81. }
  82. /*cookie, err := ctx.Cookie("poster_sid")
  83. if err != nil {
  84. entity.ResponseNormal(ctx, entity.CodeNotAllowed, err.Error(), entity.EmptyBodyObject())
  85. return
  86. }
  87. claims, err := service.ParseJWTToken(cookie)
  88. if err != nil {
  89. entity.ResponseNormal(ctx, entity.CodeNotAllowed, err.Error(), entity.EmptyBodyObject())
  90. return
  91. }*/
  92. uid := GetUID(ctx)
  93. mUser := model.NewUser(ctx)
  94. if uid == 0 {
  95. entity.ResponseNormal(ctx, entity.CodeDenied, "请先登录后再试", entity.EmptyBodyObject())
  96. return
  97. }
  98. userInfo, err := mUser.ChangePassword(uid, request.Password)
  99. if err != nil {
  100. entity.ResponseNormal(ctx, entity.CodeSystemError, err.Error(), entity.EmptyBodyObject())
  101. return
  102. }
  103. entity.ResponseSuccess(ctx, userInfo.Body)
  104. }
  105. func RefreshToken(ctx *gin.Context) {
  106. uid := GetUID(ctx)
  107. username := ctx.GetString("username")
  108. token, err := service.GenJWTToken(uid, username)
  109. if err != nil {
  110. entity.ResponseNormal(ctx, entity.CodeSystemError, err.Error(), entity.EmptyBodyObject())
  111. return
  112. }
  113. expire := time.Now().Add(service.JWTExpireDuration()).Unix()
  114. refresh := map[string]interface{}{
  115. "token": token,
  116. "expire": expire,
  117. "expire_at": time.Unix(expire, 0),
  118. }
  119. util.NewPosterCookie(ctx).SetCookie("poster_sid", token, int(setting.Conf.JWTConfig.ExpireAt))
  120. entity.ResponseSuccess(ctx, refresh)
  121. }
  122. func Logout(ctx *gin.Context) {
  123. //移除用户登录信息
  124. uid := GetUID(ctx)
  125. err := service.RemoveJWTToken(uid)
  126. if err != nil {
  127. entity.ResponseNormal(ctx, entity.CodeSystemError, err.Error(), entity.EmptyBodyObject())
  128. return
  129. }
  130. util.NewPosterCookie(ctx).SetCookie("poster_sid", "", int(setting.Conf.EncryptConfig.ExpireAt))
  131. }
  132. func ChangeEmail(ctx *gin.Context) {
  133. var request entity.ChangeEmailRequest
  134. if err := ctx.ShouldBind(&request); err != nil {
  135. if !HandleNext(ctx, tError.NewTError(entity.CodeInvalidParam.Code(), "参数不正确")) {
  136. return
  137. }
  138. }
  139. uid := GetUID(ctx)
  140. if uid == 0 {
  141. if !HandleNext(ctx, tError.NewTError(entity.CodeDenied.Code(), "请登录后重试")) {
  142. return
  143. }
  144. }
  145. userInfo, err := model.NewUser(ctx).ChangeEmail(uid, request.Email)
  146. if err != nil {
  147. if !HandleNext(ctx, tError.NewTError(entity.CodeSystemError.Code(), err.Error())) {
  148. return
  149. }
  150. }
  151. entity.ResponseSuccess(ctx, userInfo.Body)
  152. }