今天我再次查看,发现:
[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。