On branch main
modified: main_dc/yalarba/api_yal/internal/domain/auth/handler.go modified: main_dc/yalarba/api_yal/internal/domain/auth/servcie.go implement generate refresh token
This commit is contained in:
@@ -175,7 +175,7 @@ func (h *AuthHandler) RefreshToken(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
|
||||
// Генерируем новый refresh token
|
||||
newRefreshToken, err := h.generateNewRefreshToken(response.User.ID)
|
||||
newRefreshToken, err := h.authService.GenerateRefreshTokenForUser(response.User.ID)
|
||||
if err != nil {
|
||||
l.Error("Ошибка генерации нового refresh token", zap.Error(err))
|
||||
http.Error(w, "Failed to generate refresh token", http.StatusInternalServerError)
|
||||
@@ -362,11 +362,4 @@ func (h *AuthHandler) handleValidationError(w http.ResponseWriter, err error) {
|
||||
"error": "Validation failed",
|
||||
"fields": errs,
|
||||
})
|
||||
}
|
||||
|
||||
// generateNewRefreshToken генерирует новый refresh token для пользователя
|
||||
func (h *AuthHandler) generateNewRefreshToken(userID uint) (string, error) {
|
||||
// В реальном приложении здесь нужно использовать сервис для генерации refresh token
|
||||
// Пока возвращаем заглушку
|
||||
return "", nil
|
||||
}
|
||||
@@ -27,6 +27,7 @@ type AuthService interface {
|
||||
// Reset password methods
|
||||
RequestPasswordReset(email string) (string, error) // Возвращает reset token
|
||||
ConfirmPasswordReset(token, newPassword string) error
|
||||
GenerateRefreshTokenForUser(userID uint) (string, error)
|
||||
}
|
||||
|
||||
// authServiceImpl реализация сервиса аутентификации
|
||||
@@ -186,7 +187,7 @@ func (s *authServiceImpl) RequestPasswordReset(email string) (string, error) {
|
||||
}
|
||||
|
||||
// Генерируем reset token
|
||||
resetToken, err := s.generateResetToken(account)
|
||||
resetToken, err := s.generateResetToken()
|
||||
if err != nil {
|
||||
l.Error("Ошибка генерации reset token", zap.Error(err))
|
||||
return "", err
|
||||
@@ -424,7 +425,7 @@ func (s *authServiceImpl) generateRefreshToken(account *models.Account) (string,
|
||||
}
|
||||
|
||||
// generateResetToken генерирует reset token
|
||||
func (s *authServiceImpl) generateResetToken(account *models.Account) (string, error) {
|
||||
func (s *authServiceImpl) generateResetToken() (string, error) {
|
||||
// Генерируем случайный токен
|
||||
bytes := make([]byte, 32)
|
||||
if _, err := rand.Read(bytes); err != nil {
|
||||
@@ -467,4 +468,33 @@ func (s *authServiceImpl) validateRefreshToken(tokenString string) (*jwt.MapClai
|
||||
}
|
||||
|
||||
return &claims, nil
|
||||
}
|
||||
|
||||
// GenerateRefreshTokenForUser генерирует новый refresh token для пользователя по ID
|
||||
func (s *authServiceImpl) GenerateRefreshTokenForUser(userID uint) (string, error) {
|
||||
l := logger.Get()
|
||||
l.Info("Генерация refresh token для пользователя", zap.Uint("userID", userID))
|
||||
|
||||
// Получаем пользователя из базы по ID
|
||||
account, err := s.accountRepo.GetByID(userID)
|
||||
if err != nil {
|
||||
l.Error("Пользователь не найден", zap.Uint("userID", userID), zap.Error(err))
|
||||
return "", ErrUserNotFound
|
||||
}
|
||||
|
||||
// Проверяем, активен ли аккаунт
|
||||
if !account.IsActive {
|
||||
l.Error("Аккаунт деактивирован", zap.Uint("userID", userID))
|
||||
return "", errors.New("account is deactivated")
|
||||
}
|
||||
|
||||
// Генерируем refresh token
|
||||
refreshToken, err := s.generateRefreshToken(account)
|
||||
if err != nil {
|
||||
l.Error("Ошибка генерации refresh token", zap.Error(err))
|
||||
return "", err
|
||||
}
|
||||
|
||||
l.Info("Refresh token успешно сгенерирован", zap.Uint("userID", userID))
|
||||
return refreshToken, nil
|
||||
}
|
||||
Reference in New Issue
Block a user