do_gpts_user_login_logic.go 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  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. return nil, errorx.NewCodeInvalidArgumentError("用户名或密码错误")
  33. }
  34. if user == nil {
  35. return nil, errorx.NewCodeInvalidArgumentError("用户名或密码错误")
  36. }
  37. if user.Status != nil && *user.Status != uint32(utils.StatusNormal) {
  38. return nil, errorx.NewCodeInvalidArgumentError("用户被锁定")
  39. }
  40. if !utils.BcryptCheck(*req.Password, *user.Password) {
  41. return nil, errorx.NewCodeInvalidArgumentError("用户名或密码错误")
  42. }
  43. valid := utils.CheckGptLogin(user.RoleIds)
  44. if !valid {
  45. return nil, errorx.NewInvalidArgumentError("用户不允许登陆")
  46. }
  47. token, err := jwt.NewJwtToken(
  48. l.svcCtx.Config.Auth.AccessSecret,
  49. time.Now().Unix(),
  50. l.svcCtx.Config.Auth.AccessExpire,
  51. jwt.WithOption("userId", user.Id),
  52. )
  53. if err != nil {
  54. return nil, err
  55. }
  56. // add token into database
  57. expiredAt := time.Now().Add(time.Second * time.Duration(l.svcCtx.Config.Auth.AccessExpire)).UnixMilli()
  58. _, err = l.svcCtx.CoreRpc.CreateToken(l.ctx, &core.TokenInfo{
  59. Uuid: user.Id,
  60. Token: pointy.GetPointer(token),
  61. Source: pointy.GetPointer("core_user"),
  62. Status: pointy.GetPointer(uint32(utils.StatusNormal)),
  63. Username: user.Username,
  64. ExpiredAt: pointy.GetPointer(expiredAt),
  65. })
  66. if err != nil {
  67. return nil, err
  68. }
  69. resp = &types.GptsUserLoginResp{
  70. BaseDataInfo: types.BaseDataInfo{Msg: errormsg.Success},
  71. Data: types.GptsUserToken{
  72. ID: *user.Id,
  73. Token: token,
  74. Username: *user.Username,
  75. ExpireTime: uint64(expiredAt),
  76. },
  77. }
  78. return resp, nil
  79. }