From d9e04cf8654c5168aa5dec82884f24e9b6a19b73 Mon Sep 17 00:00:00 2001 From: valitovgaziz Date: Tue, 31 Mar 2026 07:05:13 +0500 Subject: [PATCH] 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 --- .../api_yal/internal/domain/auth/handler.go | 9 +---- .../api_yal/internal/domain/auth/servcie.go | 34 +++++++++++++++++-- 2 files changed, 33 insertions(+), 10 deletions(-) diff --git a/main_dc/yalarba/api_yal/internal/domain/auth/handler.go b/main_dc/yalarba/api_yal/internal/domain/auth/handler.go index 5a17e47..7920f1d 100644 --- a/main_dc/yalarba/api_yal/internal/domain/auth/handler.go +++ b/main_dc/yalarba/api_yal/internal/domain/auth/handler.go @@ -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 } \ No newline at end of file diff --git a/main_dc/yalarba/api_yal/internal/domain/auth/servcie.go b/main_dc/yalarba/api_yal/internal/domain/auth/servcie.go index ac6135a..1fd0d85 100644 --- a/main_dc/yalarba/api_yal/internal/domain/auth/servcie.go +++ b/main_dc/yalarba/api_yal/internal/domain/auth/servcie.go @@ -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 } \ No newline at end of file