do_gpts_user_login_logic.go 2.3 KB

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