mirror of
https://github.com/dartdavros/chatballs.git
synced 2026-10-05 09:14:58 +03:00
Отметка `totp_last_used_at` писалась, но ни с чем не сравнивалась. Код живёт 30 секунд и принимается с окном ±1 интервал, значит подсмотренный код работал второй раз ещё полторы минуты — RFC 6238 §5.2 требует запоминать интервал. Появилось поле `totp_last_counter`: `verify_totp` возвращает номер принятого интервала, и коды до него включительно больше не проходят. Тем же путём идёт подтверждение при настройке 2FA — код, которым её включили, на входе не сработает. Заодно два соседних. Шаг с кодом доставал пользователя без `is_active`: пароль приняли раньше, и сотрудник, отключённый между шагами, всё равно входил. И у начатого входа не было срока — брошенная вкладка ждала код сколько угодно долго; теперь пять минут. Три теста. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>