Ops, ho perso il telefono. Come posso ottenere l'OTP ora?

Oggi l’ho riconsiderato e ho scoperto che:

[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

Quindi ho provato a rimuovere anche i codici di backup, seguendo la risposta precedente di @falco:

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

Ecco ora la soluzione completa per disabilitare l’OTP per un utente che ha perso l’accesso: devi rimuovere sia le voci totps che i backup_codes, in modo che la chiamata a #totp_or_backup_codes_enabled? restituisca false.