아, 폰을 잃어버렸어요. 이제 OTP를 어떻게 받아야 하나요?

휴대폰으로 2단계 인증을 설정했는데 휴대폰을 분실했다면 어떻게 되나요?

pass-otp와 같은 다른 프로그램을 대신 사용하여 복구하는 방법은 무엇인가요?

2단계 인증 없이는 로그인할 수 없으므로, 다른 프로그램을 설정할 수 있는 토큰(비밀키, 발급자)을 어떻게 가져올 수 있나요?

rails 콘솔을 통해 2FA를 비활성화해야 합니다. 현재 Discourse에는 SMS/이메일 기반의 복구 메커니즘이 내장되어 있지 않습니다.

Discourse에는 OTP 기기를 분실한 경우를 대비한 백업 토큰이 있습니다.

또한 OTP를 여러 기기에 등록할 수도 있습니다.

FIDO2 키도 사용할 수 있으며, Discourse는 복수의 키 사용을 지원합니다. 따라서 백업 키를 안전한 장소에 보관하고, 메인 키를 사용하며, Android 지문 인식이나 Windows Hello와 같은 기기에 내장된 키도 함께 사용할 수 있습니다.

위 방법 중 어느 것도 설정하지 않았다면, 관리팀에 연락하여 계정에서 2FA(2단계 인증)를 비활성화해 달라고 요청해야 합니다.

네, 콘솔에서 2FA를 비활성화하는 절차에 대해 알려주실 수 있으신가요?

"disable 2fa"로 검색했을 때 첫 번째 결과가 다음과 같습니다.

즉:

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

음, 실제로는 위 방법을 따랐더니 이메일로 로그인하는 것도 불가능해졌고, 다음과 같은 메시지가 표시됩니다:

선택한 2단계 인증 방법이 계정에 활성화되어 있지 않습니다.

다른 관리자에게 확인해 보니 해당 계정에 2FA가 활성화되어 있지 않았습니다.


수정 제안된 해결책이 작동하지 않아서 이 주제를 #contribute:bug로 변경했습니다.

오늘 다시 확인해 보니 다음과 같은 결과를 확인했습니다:

[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를 반환합니다.