user_login.go 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. package controllers
  2. import (
  3. "encoding/json"
  4. "eta/eta_mini_crm/models"
  5. "eta/eta_mini_crm/utils"
  6. "fmt"
  7. "time"
  8. "github.com/beego/beego/v2/client/orm"
  9. )
  10. type UserLoginController struct {
  11. BaseCommonController
  12. }
  13. // Login
  14. // @Title 用户登录
  15. // @Description 用户登录
  16. // @Param request body UserLoginReq true "type json string"
  17. // @Success 200 {object} models.LoginResp
  18. // @router /login [post]
  19. func (this *UserLoginController) Login() {
  20. br := new(models.BaseResponse).Init()
  21. defer func() {
  22. if br.ErrMsg == "" {
  23. br.IsSendEmail = false
  24. }
  25. this.Data["json"] = br
  26. this.ServeJSON()
  27. }()
  28. type UserLoginReq struct {
  29. UserName string `description:"账号"`
  30. Password string `description:"密码"`
  31. ReqTime string `description:"登录时间戳"`
  32. }
  33. var req UserLoginReq
  34. err := json.Unmarshal(this.Ctx.Input.RequestBody, &req)
  35. if err != nil {
  36. br.Msg = "参数解析异常!"
  37. br.ErrMsg = "参数解析失败,Err:" + err.Error()
  38. return
  39. }
  40. if req.UserName == "" {
  41. br.Msg = "请输入账号"
  42. return
  43. }
  44. if req.Password == "" {
  45. br.Msg = "请输入密码"
  46. return
  47. }
  48. sysUser, err := models.GetSysUserBySysUserName(req.UserName)
  49. if err != nil {
  50. if err == orm.ErrNoRows {
  51. br.Msg = "登录失败, 账号或密码错误"
  52. return
  53. } else {
  54. br.Msg = "系统错误"
  55. br.ErrMsg = "系统错误" + err.Error()
  56. return
  57. }
  58. }
  59. dbPass := utils.MD5(fmt.Sprintf("%s%s%s", sysUser.Password, utils.UserLoginSalt, req.ReqTime))
  60. if req.Password != dbPass {
  61. br.Msg = "登录失败, 账号或密码错误"
  62. return
  63. }
  64. account := utils.MD5(sysUser.SysUserName)
  65. token := utils.GenToken(account)
  66. sysSession := new(models.SysSession)
  67. sysSession.UserName = sysUser.SysUserName
  68. sysSession.SysUserId = sysUser.SysUserId
  69. sysSession.ExpiredTime = time.Now().AddDate(0, 0, 60)
  70. sysSession.CreatedTime = time.Now()
  71. sysSession.LastUpdatedTime = time.Now()
  72. sysSession.AccessToken = token
  73. err = sysSession.AddSysSession()
  74. if err != nil {
  75. br.Msg = "登录失败"
  76. br.ErrMsg = "新增session信息失败, Err:" + err.Error()
  77. return
  78. }
  79. sysRole, err := models.GetSysRoleById(sysUser.SysRoleId)
  80. if err != nil {
  81. br.Msg = "登录失败"
  82. br.ErrMsg = "查询角色失败, Err:" + err.Error()
  83. return
  84. }
  85. type LoginResp struct {
  86. Authorization string
  87. SysUserName string `description:"系统用户名"`
  88. SysRealName string `description:"系统用户姓名"`
  89. SysUserId int `description:"系统用户id"`
  90. RoleName string `description:"所属角色名称"`
  91. RoleId int `description:"所属角色id"`
  92. }
  93. resp := new(LoginResp)
  94. resp.Authorization = "authorization=" + token
  95. resp.SysUserName = sysUser.SysUserName
  96. resp.SysRealName = sysUser.SysRealName
  97. resp.SysUserId = sysUser.SysUserId
  98. resp.RoleName = sysRole.SysRoleName
  99. resp.RoleId = sysUser.SysRoleId
  100. br.Data = resp
  101. br.Ret = 200
  102. br.Success = true
  103. br.Msg = "登录成功"
  104. }