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

Как понять, что первый шаг двухфакторной аутентификации прошел успешно?

2.0 Middle🔥 251 комментариев
#JavaScript Core

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

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

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

Проверка успешного прохождения первого шага 2FA

При реализации двухфакторной аутентификации первый шаг обычно представляет собой верификацию учётных данных (логин/пароль). Успешное прохождение можно определить несколькими способами:

Ответ с сервера

Сервер должен вернуть HTTP 200 или 201 со статусом, указывающим на необходимость второго фактора:

// Ответ с сервера при успешном первом шаге
{
  "success": true,
  "step": "mfa_required",
  "sessionToken": "temp-session-token-xyz",
  "mfaMethod": "totp", // или "sms", "email"
  "expiresIn": 300 // время на ввод кода
}

Обработка на фронтенде

async function handleLogin(email, password) {
  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("Login failed");
    }

    const data = await response.json();
    
    // Проверяем, требуется ли 2FA
    if (data.step === "mfa_required") {
      console.log("✓ Первый шаг пройден успешно");
      
      // Сохраняем временный токен
      sessionStorage.setItem("mfaToken", data.sessionToken);
      
      // Переходим на экран ввода кода
      router.push("/verify-mfa");
      
      // Устанавливаем таймер на истечение сессии
      setTimeout(() => {
        sessionStorage.removeItem("mfaToken");
        // Показываем уведомление об истечении
      }, data.expiresIn * 1000);
      
      return true;
    }
    
    // Если 2FA не требуется, пользователь сразу авторизован
    if (data.step === "authenticated") {
      localStorage.setItem("authToken", data.accessToken);
      router.push("/dashboard");
      return true;
    }
  } catch (error) {
    console.error("Authentication error:", error);
    return false;
  }
}

Признаки успеха

  • HTTP статус 200 - запрос обработан без ошибок
  • Поле step === "mfa_required" - явный индикатор необходимости второго фактора
  • Временный токен - сеанс всё ещё активен, но требует подтверждения
  • Отсутствие постоянного accessToken - пользователь не полностью авторизован

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

if (response.status === 401) {
  // Неверные учётные данные
  showError("Email или пароль неверны");
}

if (response.status === 429) {
  // Слишком много попыток
  showError("Слишком много попыток входа. Попробуйте позже");
  startRateLimitTimer();
}
Как понять, что первый шаг двухфакторной аутентификации прошел успешно? | PrepBro