Ой, я потерял телефон. Как теперь получить OTP?

Что произойдет, если вы настроили двухфакторную аутентификацию с помощью телефона, а затем потеряли его?

Как восстановить доступ и использовать другую программу, например pass-otp?

Поскольку без второго фактора вход в систему невозможен, как получить токены (секрет, издатель), необходимые для настройки другой программы?

Вам придется отключить двухфакторную аутентификацию через консоль Rails. На данный момент в Discourse нет встроенного механизма восстановления через SMS или электронную почту.

В Discourse есть резервные токены, которые следует использовать, если вы потеряли устройство с OTP.

Вы также можете зарегистрировать OTP на нескольких устройствах.

Можно использовать ключи FIDO2; в Discourse поддерживается использование нескольких ключей, поэтому вы можете хранить резервные ключи в надёжных местах, использовать основной ключ, а также ключи, привязанные к вашему устройству, например отпечаток пальца на Android или Windows Hello на ноутбуке.

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

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

В первом результате поиска по запросу «disable 2fa» указано:

Итак:

./launcher enter app
rails c
id = User.find_by(username: "ВАШ_ЛОГИН").id
UserSecondFactor.totps.where(user_id: id).each(&:destroy!)

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

Выбранный метод двухфакторной аутентификации не включен для вашей учётной записи.

Другой администратор подтвердил, что для учётной записи 2FA не включена.


РЕДАКТИРОВАНИЕ Я переименовал тему в bug, так как предложенное решение не работает.

Сегодня я снова посмотрел на это и обнаружил, что:

[25] pry(main)> how.totp_enabled?
=> false
[26] pry(main)> how.backup_codes_enabled?
=> true
[27] pry(main)> how.totp_or_backup_codes_enabled?
=> true

Так что я попытался удалить также резервные коды, следуя ответу выше от @falco:

UserSecondFactor.backup_codes.where(user_id: id).each(&:destroy!)

Вот полное решение для отключения OTP для пользователя, который потерял доступ: необходимо удалить как записи totps, так и backup_codes, чтобы вызов #totp_or_backup_codes_enabled? возвращал false.