do_gpts_user_login_logic.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. package User
  2. import (
  3. "context"
  4. "github.com/suyuan32/simple-admin-common/msg/errormsg"
  5. "github.com/suyuan32/simple-admin-common/utils/pointy"
  6. "github.com/suyuan32/simple-admin-core/rpc/types/core"
  7. "github.com/zeromicro/go-zero/core/errorx"
  8. "time"
  9. "wechat-api/internal/utils"
  10. "wechat-api/internal/utils/jwt"
  11. "wechat-api/internal/svc"
  12. "wechat-api/internal/types"
  13. "github.com/zeromicro/go-zero/core/logx"
  14. )
  15. type DoGptsUserLoginLogic struct {
  16. logx.Logger
  17. ctx context.Context
  18. svcCtx *svc.ServiceContext
  19. }
  20. func NewDoGptsUserLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *DoGptsUserLoginLogic {
  21. return &DoGptsUserLoginLogic{
  22. Logger: logx.WithContext(ctx),
  23. ctx: ctx,
  24. svcCtx: svcCtx}
  25. }
  26. func (l *DoGptsUserLoginLogic) DoGptsUserLogin(req *types.GptsUserLoginReq) (resp *types.GptsUserLoginResp, err error) {
  27. user, err := l.svcCtx.CoreRpc.GetUserByUsername(l.ctx,
  28. &core.UsernameReq{
  29. Username: *req.Username,
  30. })
  31. if err != nil {
  32. l.Logger.Errorf("gpts user login err=%v\n", err)
  33. return nil, errorx.NewCodeInvalidArgumentError("用户名或密码错误")
  34. }
  35. if user == nil {
  36. l.Logger.Errorf("gpts user login user=%v\n", user)
  37. return nil, errorx.NewCodeInvalidArgumentError("用户名或密码错误")
  38. }
  39. if user.Status != nil && *user.Status != uint32(utils.StatusNormal) {
  40. return nil, errorx.NewCodeInvalidArgumentError("用户被锁定")
  41. }
  42. if !utils.BcryptCheck(*req.Password, *user.Password) {
  43. l.Logger.Errorf("gpts user login check password failed\n")
  44. return nil, errorx.NewCodeInvalidArgumentError("用户名或密码错误")
  45. }
  46. valid := utils.CheckGptLogin(user.RoleIds)
  47. if !valid {
  48. return nil, errorx.NewInvalidArgumentError("用户不允许登陆")
  49. }
  50. token, err := jwt.NewJwtToken(
  51. l.svcCtx.Config.Auth.AccessSecret,
  52. time.Now().Unix(),
  53. l.svcCtx.Config.Auth.AccessExpire,
  54. jwt.WithOption("userId", user.Id),
  55. )
  56. if err != nil {
  57. return nil, err
  58. }
  59. // add token into database
  60. expiredAt := time.Now().Add(time.Second * time.Duration(l.svcCtx.Config.Auth.AccessExpire)).UnixMilli()
  61. _, err = l.svcCtx.CoreRpc.CreateToken(l.ctx, &core.TokenInfo{
  62. Uuid: user.Id,
  63. Token: pointy.GetPointer(token),
  64. Source: pointy.GetPointer("core_user"),
  65. Status: pointy.GetPointer(uint32(utils.StatusNormal)),
  66. Username: user.Username,
  67. ExpiredAt: pointy.GetPointer(expiredAt),
  68. })
  69. if err != nil {
  70. return nil, err
  71. }
  72. resp = &types.GptsUserLoginResp{
  73. BaseDataInfo: types.BaseDataInfo{Msg: errormsg.Success},
  74. Data: types.GptsUserToken{
  75. ID: *user.Id,
  76. Token: token,
  77. Username: *user.Username,
  78. ExpireTime: uint64(expiredAt),
  79. },
  80. }
  81. return resp, nil
  82. }