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:
2026-03-31 07:05:13 +05:00
parent 622638643c
commit d9e04cf865
2 changed files with 33 additions and 10 deletions
@@ -175,7 +175,7 @@ func (h *AuthHandler) RefreshToken(w http.ResponseWriter, r *http.Request) {
} }
// Генерируем новый refresh token // Генерируем новый refresh token
newRefreshToken, err := h.generateNewRefreshToken(response.User.ID) newRefreshToken, err := h.authService.GenerateRefreshTokenForUser(response.User.ID)
if err != nil { if err != nil {
l.Error("Ошибка генерации нового refresh token", zap.Error(err)) l.Error("Ошибка генерации нового refresh token", zap.Error(err))
http.Error(w, "Failed to generate refresh token", http.StatusInternalServerError) http.Error(w, "Failed to generate refresh token", http.StatusInternalServerError)
@@ -363,10 +363,3 @@ func (h *AuthHandler) handleValidationError(w http.ResponseWriter, err error) {
"fields": errs, "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 // Reset password methods
RequestPasswordReset(email string) (string, error) // Возвращает reset token RequestPasswordReset(email string) (string, error) // Возвращает reset token
ConfirmPasswordReset(token, newPassword string) error ConfirmPasswordReset(token, newPassword string) error
GenerateRefreshTokenForUser(userID uint) (string, error)
} }
// authServiceImpl реализация сервиса аутентификации // authServiceImpl реализация сервиса аутентификации
@@ -186,7 +187,7 @@ func (s *authServiceImpl) RequestPasswordReset(email string) (string, error) {
} }
// Генерируем reset token // Генерируем reset token
resetToken, err := s.generateResetToken(account) resetToken, err := s.generateResetToken()
if err != nil { if err != nil {
l.Error("Ошибка генерации reset token", zap.Error(err)) l.Error("Ошибка генерации reset token", zap.Error(err))
return "", err return "", err
@@ -424,7 +425,7 @@ func (s *authServiceImpl) generateRefreshToken(account *models.Account) (string,
} }
// generateResetToken генерирует reset token // generateResetToken генерирует reset token
func (s *authServiceImpl) generateResetToken(account *models.Account) (string, error) { func (s *authServiceImpl) generateResetToken() (string, error) {
// Генерируем случайный токен // Генерируем случайный токен
bytes := make([]byte, 32) bytes := make([]byte, 32)
if _, err := rand.Read(bytes); err != nil { if _, err := rand.Read(bytes); err != nil {
@@ -468,3 +469,32 @@ func (s *authServiceImpl) validateRefreshToken(tokenString string) (*jwt.MapClai
return &claims, nil 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
}