哎呀,我手机丢了。现在如何获取 OTP?

今天我再次查看,发现:

[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。