adminLoginLogic.go 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. package pub
  2. import (
  3. "context"
  4. "crypto/subtle"
  5. "time"
  6. "perms-system-server/internal/consts"
  7. authHelper "perms-system-server/internal/logic/auth"
  8. "perms-system-server/internal/model/user"
  9. "perms-system-server/internal/response"
  10. "perms-system-server/internal/svc"
  11. "perms-system-server/internal/types"
  12. "github.com/zeromicro/go-zero/core/logx"
  13. "golang.org/x/crypto/bcrypt"
  14. )
  15. type AdminLoginLogic struct {
  16. logx.Logger
  17. ctx context.Context
  18. svcCtx *svc.ServiceContext
  19. }
  20. func NewAdminLoginLogic(ctx context.Context, svcCtx *svc.ServiceContext) *AdminLoginLogic {
  21. return &AdminLoginLogic{
  22. Logger: logx.WithContext(ctx),
  23. ctx: ctx,
  24. svcCtx: svcCtx,
  25. }
  26. }
  27. func (l *AdminLoginLogic) AdminLogin(req *types.AdminLoginReq) (resp *types.LoginResp, err error) {
  28. if subtle.ConstantTimeCompare([]byte(req.ManagementKey), []byte(l.svcCtx.Config.Auth.ManagementKey)) != 1 {
  29. return nil, response.ErrUnauthorized("managementKey无效")
  30. }
  31. u, err := l.svcCtx.SysUserModel.FindOneByUsername(l.ctx, req.Username)
  32. if err != nil {
  33. if err == user.ErrNotFound {
  34. return nil, response.ErrUnauthorized("用户名或密码错误")
  35. }
  36. return nil, err
  37. }
  38. if u.Status != consts.StatusEnabled {
  39. return nil, response.ErrForbidden("账号已被冻结")
  40. }
  41. if err := bcrypt.CompareHashAndPassword([]byte(u.Password), []byte(req.Password)); err != nil {
  42. return nil, response.ErrUnauthorized("用户名或密码错误")
  43. }
  44. ud := l.svcCtx.UserDetailsLoader.Load(l.ctx, u.Id, "")
  45. accessToken, err := authHelper.GenerateAccessToken(
  46. l.svcCtx.Config.Auth.AccessSecret,
  47. l.svcCtx.Config.Auth.AccessExpire,
  48. ud.UserId, ud.Username, ud.ProductCode, ud.MemberType, ud.Perms,
  49. )
  50. if err != nil {
  51. return nil, err
  52. }
  53. refreshToken, err := authHelper.GenerateRefreshToken(
  54. l.svcCtx.Config.Auth.RefreshSecret,
  55. l.svcCtx.Config.Auth.RefreshExpire,
  56. ud.UserId, ud.ProductCode,
  57. )
  58. if err != nil {
  59. return nil, err
  60. }
  61. return &types.LoginResp{
  62. AccessToken: accessToken,
  63. RefreshToken: refreshToken,
  64. Expires: time.Now().Unix() + l.svcCtx.Config.Auth.AccessExpire,
  65. UserInfo: types.UserInfo{
  66. UserId: ud.UserId,
  67. Username: ud.Username,
  68. Nickname: ud.Nickname,
  69. Avatar: ud.Avatar,
  70. Email: ud.Email,
  71. Phone: ud.Phone,
  72. IsSuperAdmin: ud.IsSuperAdminRaw,
  73. MustChangePassword: ud.MustChangePwdRaw,
  74. MemberType: ud.MemberType,
  75. Perms: ud.Perms,
  76. },
  77. }, nil
  78. }