Oups, j'ai perdu mon téléphone. Comment puis-je recevoir l'OTP maintenant ?

Que se passe-t-il si vous avez activé l’authentification à deux facteurs avec votre téléphone et que vous l’avez perdu ?

Comment récupérer et utiliser un autre programme, par exemple pass-otp, à la place ?

Puisqu’il est impossible de se connecter sans le second facteur, comment obtenir les jetons (secret, émetteur) qui permettront de configurer un autre programme ?

Vous devrez désactiver l’authentification à deux facteurs (2FA) via la console Rails. Discourse ne dispose pas encore d’un mécanisme de récupération intégré basé sur SMS ou e-mail.

Discourse dispose de jetons de sauvegarde, à utiliser en cas de perte de votre appareil OTP.

Vous pouvez également enregistrer l’OTP sur plusieurs appareils.

Les clés FIDO2 peuvent également être utilisées. Discourse prend en charge l’utilisation de plusieurs clés, vous permettant ainsi de conserver des clés de sauvegarde dans des endroits sûrs, votre clé principale, ainsi que celles intégrées à votre appareil, comme les empreintes digitales sur Android ou les appareils Windows Hello sur les ordinateurs portables.

Si vous n’avez fait aucune de ces options, vous devrez contacter l’équipe d’administration et leur demander de désactiver la 2FA sur votre compte.

D’accord, pouvez-vous s’il vous plaît indiquer la procédure pour désactiver la 2FA depuis la console ?

Recherchez “désactiver 2FA” ; le premier résultat indique

Donc :

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

En fait, après avoir suivi la méthode ci-dessus, je ne peux plus me connecter, même par e-mail, avec le message suivant :

La méthode de second facteur sélectionnée n’est pas activée pour votre compte.

Un autre administrateur a vérifié que le compte n’avait pas de 2FA activé.


EDIT J’ai modifié le sujet pour le classer en bug car la solution proposée ne fonctionne pas.

Aujourd’hui, je l’ai examiné à nouveau et j’ai constaté que :

[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

J’ai donc essayé de supprimer également les codes de sauvegarde, en suivant la réponse ci-dessus de @falco :

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

Voici maintenant la solution complète pour désactiver l’OTP pour un utilisateur qui a perdu ses moyens de récupération : vous devez supprimer à la fois les entrées totps et les backup_codes, afin que l’appel à #totp_or_backup_codes_enabled? retourne false.