loginLogic.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package pub
  2. import (
  3. "context"
  4. "time"
  5. "perms-system-server/internal/middleware"
  6. "perms-system-server/internal/response"
  7. "perms-system-server/internal/svc"
  8. "perms-system-server/internal/types"
  9. "github.com/zeromicro/go-zero/core/logx"
  10. )
  11. type LoginLogic struct {
  12. logx.Logger
  13. ctx context.Context
  14. svcCtx *svc.ServiceContext
  15. }
  16. func NewLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *LoginLogic {
  17. return &LoginLogic{
  18. Logger: logx.WithContext(ctx),
  19. ctx: ctx,
  20. svcCtx: svcCtx,
  21. }
  22. }
  23. // Login 产品端登录。产品成员通过用户名密码 + productCode 登录指定产品,返回 JWT 令牌对及用户权限信息。
  24. func (l *LoginLogic) Login(req *types.LoginReq) (resp *types.LoginResp, err error) {
  25. clientIP := middleware.GetClientIP(l.ctx)
  26. result, err := ValidateProductLogin(l.ctx, l.svcCtx, req.Username, req.Password, req.ProductCode, clientIP)
  27. if err != nil {
  28. if le, ok := err.(*LoginError); ok {
  29. switch le.Code {
  30. case 400:
  31. return nil, response.ErrBadRequest(le.Message)
  32. case 401:
  33. return nil, response.ErrUnauthorized(le.Message)
  34. case 403:
  35. return nil, response.ErrForbidden(le.Message)
  36. case 429:
  37. return nil, response.NewCodeError(429, le.Message)
  38. }
  39. }
  40. return nil, err
  41. }
  42. ud := result.UserDetails
  43. return &types.LoginResp{
  44. AccessToken: result.AccessToken,
  45. RefreshToken: result.RefreshToken,
  46. Expires: time.Now().Unix() + l.svcCtx.Config.Auth.AccessExpire,
  47. UserInfo: types.UserInfo{
  48. UserId: ud.UserId,
  49. Username: ud.Username,
  50. Nickname: ud.Nickname,
  51. Avatar: ud.Avatar,
  52. Email: ud.Email,
  53. Phone: ud.Phone,
  54. IsSuperAdmin: ud.IsSuperAdminRaw,
  55. MustChangePassword: ud.MustChangePwdRaw,
  56. MemberType: ud.MemberType,
  57. Perms: ud.Perms,
  58. },
  59. }, nil
  60. }