← Назад к вопросам
Как понять, что первый шаг двухфакторной аутентификации прошел успешно?
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();
}