user.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. package controller
  2. import (
  3. "context"
  4. "github.com/gogf/gf/v2/crypto/gmd5"
  5. "github.com/gogf/gf/v2/errors/gerror"
  6. "github.com/gogf/gf/v2/frame/g"
  7. "github.com/gogf/gf/v2/os/genv"
  8. "github.com/gogf/gf/v2/util/gconv"
  9. "github.com/tiger1103/gfast/v3/api/v1/system"
  10. commonService "github.com/tiger1103/gfast/v3/internal/app/common/service"
  11. "github.com/tiger1103/gfast/v3/internal/app/system/model"
  12. "github.com/tiger1103/gfast/v3/internal/app/system/service"
  13. "github.com/tiger1103/gfast/v3/library/libUtils"
  14. )
  15. var (
  16. User = UserController{}
  17. )
  18. type UserController struct {
  19. baseController
  20. }
  21. func (c *UserController) Login(ctx context.Context, req *system.UserLoginReq) (res *system.UserLoginRes, err error) {
  22. var (
  23. user *model.LoginUserRes
  24. token string
  25. permissions []string
  26. menuList []*model.UserMenus
  27. )
  28. //判断验证码是否正确
  29. debug := genv.GetWithCmd("gf.debug")
  30. if debug.Int() != 1 {
  31. if !commonService.Captcha().VerifyString(req.VerifyKey, req.VerifyCode) {
  32. err = gerror.New("验证码输入错误")
  33. return
  34. }
  35. }
  36. ip := libUtils.GetClientIp(ctx)
  37. userAgent := libUtils.GetUserAgent(ctx)
  38. user, err = service.User().GetAdminUserByUsernamePassword(ctx, req)
  39. if err != nil {
  40. // 保存登录失败的日志信息
  41. service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{
  42. Status: 0,
  43. Username: req.Username,
  44. Ip: ip,
  45. UserAgent: userAgent,
  46. Msg: err.Error(),
  47. Module: "系统后台",
  48. })
  49. return
  50. }
  51. err = service.User().UpdateLoginInfo(ctx, user.Id, ip)
  52. if err != nil {
  53. return
  54. }
  55. // 报存登录成功的日志信息
  56. service.SysLoginLog().Invoke(ctx, &model.LoginLogParams{
  57. Status: 1,
  58. Username: req.Username,
  59. Ip: ip,
  60. UserAgent: userAgent,
  61. Msg: "登录成功",
  62. Module: "系统后台",
  63. })
  64. key := gconv.String(user.Id) + "-" + gmd5.MustEncryptString(user.UserName) + gmd5.MustEncryptString(user.UserPassword)
  65. if g.Cfg().MustGet(ctx, "gfToken.multiLogin").Bool() {
  66. key = gconv.String(user.Id) + "-" + gmd5.MustEncryptString(user.UserName) + gmd5.MustEncryptString(user.UserPassword+ip+userAgent)
  67. }
  68. token, err = service.GfToken(ctx).GenerateToken(ctx, key, user)
  69. if err != nil {
  70. return
  71. }
  72. //获取用户菜单数据
  73. menuList, permissions, err = service.User().GetAdminRules(ctx, user.Id)
  74. if err != nil {
  75. return
  76. }
  77. res = &system.UserLoginRes{
  78. UserInfo: user,
  79. Token: token,
  80. MenuList: menuList,
  81. Permissions: permissions,
  82. }
  83. return
  84. }