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
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
}