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
|
// Генерируем новый 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)
|
||||||
@@ -362,11 +362,4 @@ func (h *AuthHandler) handleValidationError(w http.ResponseWriter, err error) {
|
|||||||
"error": "Validation failed",
|
"error": "Validation failed",
|
||||||
"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 {
|
||||||
@@ -467,4 +468,33 @@ 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
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user