Vaya, he perdido mi teléfono. ¿Cómo puedo obtener el OTP ahora?

¿Qué sucede si implementaste la autenticación de dos factores con tu teléfono y lo perdiste?

¿Cómo recuperar y usar otro programa, por ejemplo, pass-otp, en su lugar?

Dado que no se puede iniciar sesión sin el segundo factor, ¿cómo obtener los tokens (secreto, emisor) que permitirán configurar otro programa?

Tendrás que desactivar la autenticación de dos factores (2FA) a través de la consola de Rails. Por el momento, Discourse no cuenta con un mecanismo de recuperación integrado basado en SMS o correo electrónico.

Discourse dispone de tokens de respaldo que deben utilizarse si pierdes tu dispositivo OTP.

También puedes registrar el OTP en varios dispositivos.

Las claves FIDO2 también pueden utilizarse, y Discourse admite el uso de múltiples claves, por lo que puedes tener claves de respaldo almacenadas en lugares seguros, tu clave principal y las que están integradas en tu dispositivo, como la huella dactilar de Android o los dispositivos de inicio de sesión de Windows Hello en portátiles.

Si no hiciste ninguna de estas opciones, tendrás que contactar con el equipo de administración y pedirles que desactiven la autenticación en dos pasos (2FA) en tu cuenta.

Vale, ¿podrías indicarme el procedimiento para desactivar la 2FA desde la consola?

Busca “disable 2fa” y el primer resultado dice

Así que:

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

Bueno, en realidad, después de seguir el método anterior, no tengo posibilidad de iniciar sesión, ni siquiera por correo electrónico, con el siguiente mensaje:

El método de segundo factor seleccionado no está habilitado para tu cuenta.

Otro administrador verificó que la cuenta no tenía 2FA habilitado.


EDIT He reorientado el tema a bug porque la solución propuesta no funciona.

Hoy lo volví a revisar y descubrí 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

Así que intenté eliminar también los códigos de respaldo, siguiendo la respuesta anterior de @falco:

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

Ahora, aquí está la solución completa para deshabilitar OTP en un usuario que perdió su forma de acceder: debes eliminar tanto las entradas de totps como los backup_codes, de modo que la llamada a #totp_or_backup_codes_enabled? devuelva false.