Не удалось подтвердить новый адрес электронной почты, когда включены резервные коды двухфакторной аутентификации

Когда включены резервные коды двухфакторной аутентификации, подтверждение нового адреса электронной почты завершается ошибкой:

Ой

Программное обеспечение, управляющее этим форумом, столкнулось с неожиданной проблемой. Приносим извинения за неудобства.

Подробная информация об ошибке была записана в журнал, и автоматически сформировано уведомление. Мы разберёмся в этом.

Дальнейших действий не требуется. Однако, если ошибка сохраняется, вы можете предоставить дополнительные детали, включая шаги для воспроизведения ошибки, опубликовав тему в разделе обратной связи на сайте.

Это происходит на нескольких установках Discourse, поэтому проблема не специфична для одной из них.

Отключение функции «резервные коды двухфакторной аутентификации» решает проблему, и подтверждение по электронной почте проходит успешно.

Полные шаги для воспроизведения проблемы:

  • Начните с аккаунта на любом сайте Discourse (для тестирования можно использовать https://try.discourse.org/).
  • Настройте 2FA с использованием TOTP (физические ключи безопасности я не тестировал).
  • Измените адрес электронной почты в своём аккаунте.
  • Нажмите на ссылку в письме с подтверждением, отправленном на новый адрес. Обратите внимание, что подтверждение проходит успешно.
  • Включите «резервные коды двухфакторной аутентификации» в настройках 2FA.
  • Снова измените адрес электронной почты в аккаунте.
  • Нажмите на ссылку в письме с подтверждением, отправленном на новый адрес. Обратите внимание, что подтверждение завершается ошибкой, описанной выше.
  • Отключите «резервные коды двухфакторной аутентификации».
  • Снова измените адрес электронной почты.
  • Нажмите на ссылку в письме с подтверждением, отправленном на новый адрес.
  • Вас попросят ввести код TOTP.
  • На этот раз подтверждение нового адреса электронной почты проходит успешно.
4 лайка

Проверяли ли вы /logs в веб-браузере, войдя в систему как администратор, чтобы увидеть, в чём именно заключается ошибка? Я думаю, что если бы это была настоящая ошибка, мы бы уже столкнулись с ней на наших сайтах.

Также, это связано с ключами безопасности или токенами TOTP? В любом случае, нам понадобятся конкретные шаги для воспроизведения (либо в среде разработки, либо на try.discourse.org), чтобы мы могли подтвердить проблему.

3 лайка

Просто хочу добавить: на форуме Caddy не видно никаких соответствующих ошибок в логах.

2 лайка

Спасибо за перекрёстные ссылки на обсуждения!

Хорошая мысль. Оказывается, это проблема возникает только при включённых резервных кодах двухфакторной аутентификации. Я обновил пост новыми деталями и шагами для воспроизведения.

1 лайк

Как вы относитесь к этим шагам воспроизведения @tshenry? Последовательность кажется мне немного странной.

1 лайк

Я не имел в виду, что электронную почту нужно обновлять несколько раз. Это означает, что проверка электронной почты не проходит только тогда, когда включены резервные коды, а в остальных случаях — всё работает.

Здесь определённо есть ошибка. Чтобы немного уточнить шаги для воспроизведения:

  1. Настройте 2FA с помощью TOTP
  2. Включите резервные коды
  3. Измените адрес электронной почты
  4. Перейдите по ссылке проверки в письме с подтверждением
  5. Вы увидите страницу с сообщением «Ой»

Я могу подтвердить, что отключение резервных кодов немедленно устраняет проблему, даже при использовании той же ссылки проверки электронной почты.

В логе ошибок указано:

ActionView::Template::Error (Missing partial common/_second_factor_form_script with {:locale=>[:en_US, :en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby]}. Searched in:
  * "/var/www/discourse/app/views"
)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.1/lib/action_view/path_set.rb:48:in `find'

Что, как я полагаю, связано с этой строкой: https://github.com/discourse/discourse/blob/master/app/views/users_email/confirm.html.erb#L36

В ней упоминается файл, который действительно отсутствует: discourse/app/views/common at main · discourse/discourse · GitHub

8 лайков

Спасибо @arun — мы должны это исправить @eviltrout

4 лайка

Это исправлено в этом коммите:

7 лайков