admin_common.go 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package service
  2. import (
  3. "golang.org/x/crypto/bcrypt"
  4. "sghgogs.com/sghblog/authorization-service/domain/model/base"
  5. pb "sghgogs.com/sghblog/authorization-service/proto"
  6. "sghgogs.com/sghblog/common"
  7. "sghgogs.com/sghblog/common/errorcode"
  8. )
  9. // checkPasswordHash 验证用户输入的密码是否与存储的哈希值匹配
  10. func checkPasswordHash(password, hash string) bool {
  11. err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password))
  12. return err == nil
  13. }
  14. func (s *Service) AdminLogin(name, pwd string) (pb.AdminUser, error) {
  15. var user pb.AdminUser
  16. // 1.查询账号是否存在
  17. if exists, err := s.Repository.IsAdminUserExists(name); err != nil {
  18. return user, errorcode.New("authorization service", err.Error(), 500)
  19. } else {
  20. if !exists {
  21. return user, errorcode.New("authorization service", common.ErrorMessage[common.AccountDoesNotExist], 400)
  22. }
  23. }
  24. login, err := s.Repository.AdminLogin(name)
  25. // 3.查询用户信息
  26. if err != nil {
  27. return user, errorcode.New("authorization service", err.Error(), 500)
  28. }
  29. if !checkPasswordHash(pwd, login.Password) {
  30. return user, errorcode.BadRequest("authorization service", common.ErrorMessage[common.IncorrectPasswordErrorCode])
  31. }
  32. if login.Status == pb.StatusEnum_DELETED || login.Status == pb.StatusEnum_DISABLED {
  33. return user, errorcode.BadRequest("authorization service", common.ErrorMessage[common.AccountLockedErrorCode])
  34. }
  35. // checkPasswordHash
  36. adminUser := pb.AdminUser{
  37. Id: login.ID,
  38. Username: login.Username,
  39. PhoneNumber: login.PhoneNumber,
  40. Avatar: login.Avatar,
  41. Email: login.Email,
  42. Status: login.Status,
  43. IsReserved: login.IsReserved,
  44. CreatedAt: ConvertTimeToInt64(login.CreatedAt),
  45. UpdatedAt: ConvertTimeToInt64(*login.UpdatedAt),
  46. Roles: base.RolesToProto(login),
  47. Teams: base.TeamsToProto(login),
  48. }
  49. return adminUser, nil
  50. }