SSH спасла двухфакторку: как найти потерянный QR-код Authelia

Черный экран Authelia: как SSH-команда спасла двухфакторку
borisovai-admin требовал двухфакторную аутентификацию, и это казалось решённой задачей. Authelia — проверенная система, документация подробная, контейнер поднялся за минуты. Порты открыты, сертификаты в порядке, логи молчат. Всё отлично. До тех пор, пока тестировщик не нажал кнопку «Register device».
Экран почернел. Точнее, остался белым, но QR-кода не было. Никакого движения, никакой реакции системы. Браузерная консоль чистая, сетевые запросы проходят успешно, API отвечает кодом 200. Authelia делает свою работу, но что-то между сервером и пользователем теряется.
Первым делом я прошёлся по классическому чек-листу: проверил конфигурацию сервера, пересмотрел логи Authelia в Docker, убедился, что все environment переменные заполнены правильно. Всё было на месте. Но QR-код так и не появился — ни в интерфейсе, ни в devtools браузера.
Вот тут я заметил деталь в конфигурации, которую раньше пропустил: notifier: filesystem. Это не SMTP, не SendGrid, не какой-то облачный сервис. Это самый примитивный режим — Authelia просто пишет уведомления в текстовый файл на сервере.
Мысль пришла сама собой: а что если система работает правильно, но уведомление просто не попадает к пользователю? Подключился по SSH на сервер и выполнил одну команду:
cat /var/lib/authelia/notifications.txt
И там она была! Полная ссылка вида https://auth.borisovai.tech/...token... — именно та, которая должна была привести к QR-коду. Authelia делала всё правильно. Она генерировала ссылку, защищала её токеном и записывала в лог-файл. Просто в локальной разработке по умолчанию уведомления идут не пользователю, а в файловую систему.
Открыл эту ссылку в браузере — QR-код мгновенно появился. Сканировали в Google Authenticator, всё сработало с первой попытки.
Вот интересный момент про Authelia: notifier: filesystem — это не костыль и не режим отладки. Это очень удобная фишка для локальной разработки. Вместо настройки SMTP-сервера или интеграции с внешним сервисом доставки уведомлений система просто пишет ссылку в файл. Быстро, просто, без зависимостей. Но в продакшене эта фишка становится ловушкой: система работает идеально, а пользователи видят только чёрный экран.
Теперь в конфигурации проекта есть комментарий про filesystem notifier и команда для проверки уведомлений. Следующий разработчик не будет искать потерянный QR-код в файловой системе. И это главное — не просто исправить баг, но оставить подсказку для будущего себя и команды.
Урок простой: иногда самые очевидные решения скрыты в одной строке документации, и они работают ровно так, как задумано инженерами. SSH остаётся лучшим другом разработчика 😄
Метаданные
- Session ID:
- grouped_C--projects-bot-social-publisher_20260208_2254
- Branch:
- main
- Dev Joke
- Совет дня: перед тем как обновить Kotlin, сделай бэкап. И резюме.
Часть потока:
Разработка: bot-social-publisher