Ops, perdi meu celular. Como posso fazer o OTP agora?

O que acontece se você implementou a autenticação de dois fatores com seu telefone e o perdeu?

Como recuperar e usar outro programa, por exemplo, pass-otp, em seu lugar?

Como não é possível fazer login sem o segundo fator, como obter os tokens (segredo, emissor) que permitirão configurar outro programa?

Você terá que desativar a autenticação de dois fatores (2FA) através do console do Rails. O Discourse não possui um mecanismo de recuperação baseado em SMS ou e-mail integrado até o momento.

O Discourse possui tokens de backup, que devem ser usados caso você perca seu dispositivo OTP.

Você também pode registrar o OTP em vários dispositivos.

Chaves FIDO2 também podem ser usadas, e o Discourse suporta o uso de múltiplas chaves. Assim, você pode ter chaves de backup armazenadas em locais seguros, sua chave principal e aquelas integradas ao seu dispositivo, como a impressão digital no Android e os dispositivos Windows Hello em laptops.

Se você não fez nenhuma dessas opções, terá que entrar em contato com a equipe de administração e solicitar que desabilitem a autenticação de dois fatores (2FA) na sua conta.

OK, você poderia, por favor, indicar o procedimento para desativar a 2FA pelo console?

Pesquise por “disable 2fa”; o primeiro resultado diz

Então:

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

Bem, na verdade, após seguir o método acima, não tenho mais a possibilidade de fazer login, nem mesmo por e-mail, com a seguinte mensagem:

O método de segundo fator selecionado não está habilitado para sua conta.

Outro administrador verificou que a conta não tinha 2FA habilitado.


EDIT Reencaminhei o tópico para bug porque a solução proposta não está funcionando.

Hoje olhei para isso novamente e descobri 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

Então, tentei remover os códigos de backup também, seguindo a resposta acima de @falco:

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

Agora, aqui está a solução completa para desabilitar o OTP de um usuário quando ele perdeu o acesso: você deve remover tanto as entradas de totps quanto as de backup_codes, para que a chamada a #totp_or_backup_codes_enabled? retorne false.