Ups, ich habe mein Handy verloren. Wie kann ich jetzt den OTP erhalten?

Was passiert, wenn Sie die Zwei-Faktor-Authentifizierung mit Ihrem Telefon eingerichtet haben und es verloren haben?

Wie kann man sich wiederherstellen und stattdessen ein anderes Programm verwenden, z. B. pass-otp?

Da man sich ohne den zweiten Faktor nicht anmelden kann: Wie erhält man die Tokens (Geheimnis, Aussteller), die erforderlich sind, um ein anderes Programm einzurichten?

Du musst die Zwei-Faktor-Authentifizierung über die Rails-Konsole deaktivieren. Discourse verfügt derzeit über keinen integrierten Wiederherstellungsmechanismus auf Basis von SMS oder E-Mail.

Discourse verfügt über Sicherungscodes, die verwendet werden können, falls Sie Ihr OTP-Gerät verlieren.

Sie können das OTP auch auf mehreren Geräten registrieren.

FIDO2-Schlüssel können ebenfalls verwendet werden. Discourse unterstützt die Verwendung mehrerer Schlüssel, sodass Sie Sicherungsschlüssel an sicheren Orten aufbewahren können, Ihren Hauptschlüssel sowie die in Ihrem Gerät hinterlegten Schlüssel, wie z. B. den Android-Fingerabdruck oder Windows Hello auf Ihrem Laptop.

Falls Sie keines dieser Verfahren genutzt haben, müssen Sie sich an das Admin-Team wenden und bitten, die Zwei-Faktor-Authentifizierung für Ihr Konto zu deaktivieren.

OK, kannst du mir bitte auf das Verfahren verweisen, um die Zwei-Faktor-Authentifizierung über die Konsole zu deaktivieren?

Suche zuerst nach „disable 2fa“ – das erste Ergebnis lautet:

Also:

./launcher enter app
rails c
id = User.find_by(username: "DEINBENUTZERNAME").id
UserSecondFactor.totps.where(user_id: id).each(&:destroy!)

Nun, tatsächlich bin ich nach Befolgen der oben genannten Methode nicht mehr in der Lage, sich anzumelden, auch nicht per E-Mail, mit folgender Meldung:

Die ausgewählte Methode für den zweiten Faktor ist für Ihr Konto nicht aktiviert.

Ein anderer Administrator hat bestätigt, dass für das Konto keine 2FA aktiviert war.


EDIT: Ich habe das Thema auf bug umgeändert, da die vorgeschlagene Lösung nicht funktioniert.

Heute habe ich es erneut geprüft und festgestellt:

[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

Daraufhin habe ich versucht, auch die Backup-Codes zu entfernen, wie in der obigen Antwort von @falco beschrieben:

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

Hier ist nun die vollständige Lösung, um OTP für einen Benutzer zu deaktivieren, der keinen Zugriff mehr hat: Sie müssen sowohl die totps-Einträge als auch die backup_codes entfernen, damit der Aufruf von #totp_or_backup_codes_enabled? false zurückgibt.