← Назад к вопросам

Что происходит после нажатия кнопки login?

1.7 Middle🔥 163 комментариев
#JavaScript Core

Комментарии (3)

🐱
claude-haiku-4.5PrepBro AI3 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Процесс аутентификации после нажатия Login

На фронтенде происходит цепочка событий, которая начинается с обработчика клика и завершается сохранением данных пользователя.

Шаг 1: Валидация формы

const handleLogin = async (e: React.FormEvent) => {
  e.preventDefault();
  
  // Проверяем пустые поля
  if (!email || !password) {
    setError('Email и пароль обязательны');
    return;
  }
  
  // Валидируем формат email
  if (!isValidEmail(email)) {
    setError('Некорректный email');
    return;
  }
};

Шаг 2: HTTP запрос на сервер

Отправляется POST запрос на /api/v1/auth/login с email и паролем:

const response = await fetch('/api/v1/auth/login', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ email, password })
});

const data = await response.json();

Шаг 3: Обработка ответа

Сервер возвращает:

  • 200 OK: { access_token, refresh_token, user: {...} }
  • 401 Unauthorized: { error: 'Invalid credentials' }
  • 429 Too Many Requests: атака на перебор пароля
if (!response.ok) {
  if (response.status === 401) {
    setError('Неверный email или пароль');
  } else if (response.status === 429) {
    setError('Слишком много попыток. Попробуйте позже');
  }
  return;
}

Шаг 4: Сохранение токенов

Токены сохраняются в httpOnly cookies или localStorage:

// Вариант 1: Автоматически через httpOnly cookies
// Бэкенд устанавливает Set-Cookie header, браузер сохраняет

// Вариант 2: Явное сохранение в localStorage
localStorage.setItem('access_token', data.access_token);
localStorage.setItem('refresh_token', data.refresh_token);

Шаг 5: Обновление состояния приложения

Упдейтим AuthContext или Redux store:

setUser(data.user);
setIsAuthenticated(true);
setLoading(false);

Шаг 6: Редирект на главную

После успешной авторизации перенаправляем пользователя:

router.push('/dashboard');

Обработка ошибок сети

try {
  const response = await fetch('/api/v1/auth/login', {...});
  const data = await response.json();
} catch (error) {
  setError('Ошибка соединения. Проверьте интернет');
}

Безопасность

  • Пароль передаётся только по HTTPS
  • Никогда не храним пароль на клиенте
  • Access token живёт 15 минут, refresh token 7 дней
  • После logout удаляем токены и очищаем состояние

Полный пример с React Hooks

const handleLogin = async (e) => {
  e.preventDefault();
  setLoading(true);
  setError(null);
  
  try {
    const response = await fetch('/api/v1/auth/login', {
      method: 'POST',
      headers: { 'Content-Type': 'application/json' },
      body: JSON.stringify({ email, password })
    });
    
    if (!response.ok) throw new Error('Auth failed');
    
    const { access_token, user } = await response.json();
    
    localStorage.setItem('access_token', access_token);
    setUser(user);
    router.push('/dashboard');
  } catch (err) {
    setError(err.message);
  } finally {
    setLoading(false);
  }
};
Что происходит после нажатия кнопки login? | PrepBro