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.