이중 인증 백업 코드가 활성화된 경우 새 이메일을 확인할 수 없음

2단계 인증 백업 코드가 활성화된 상태에서 새로운 이메일 주소를 확인하면 다음 오류가 발생합니다:

Oops

이 토론 포럼을 구동하는 소프트웨어에서 예상치 못한 문제가 발생했습니다. 불편을 드려 죄송합니다.

오류에 대한 자세한 정보는 로그에 기록되었으며, 자동 알림이 생성되었습니다. 확인하겠습니다.

추가 조치는 필요하지 않습니다. 그러나 오류 상태가 지속되는 경우, 오류 재현 단계를 포함한 추가 세부 정보를 사이트의 피드백 카테고리에 토론 주제를 게시하여 제공할 수 있습니다.

이 문제는 여러 Discourse 설정에서 발생하므로 특정 환경에만 국한된 것이 아닙니다.

2단계 인증 백업 코드 기능을 끄면 문제가 해결되며, 이메일 인증이 정상적으로 진행됩니다.

문제를 재현하는 전체 단계:

  • 아무 Discourse(테스트용으로 https://try.discourse.org/ 사용 가능)에서 계정을 시작합니다.
  • TOTP로 2FA를 설정합니다. (물리적 보안 키는 테스트하지 않았습니다.)
  • 계정에서 이메일을 변경합니다.
  • 새 이메일 받은 편지함으로 전송된 확인 이메일을 클릭합니다. 확인 과정이 정상적으로 완료되는 것을 확인하세요.
  • 2FA 설정에서 2단계 인증 백업 코드를 활성화합니다.
  • 계정에서 이메일을 다시 변경합니다.
  • 최신 이메일 받은 편지함으로 전송된 확인 이메일을 클릭합니다. 이전과 동일한 오류로 확인이 실패하는 것을 확인하세요.
  • 2단계 인증 백업 코드를 비활성화합니다.
  • 이메일을 다시 변경합니다.
  • 최신 주소로 전송된 확인 이메일을 클릭합니다.
  • TOTP 코드 입력을 요구받습니다.
  • 이번에는 최신 이메일 확인이 정상적으로 완료됩니다.
4개의 좋아요

관리자로 로그인한 상태에서 웹 브라우저에서 /logs를 확인해서 실제 오류가 무엇인지 살펴봤나요? 실제로 버그였다면 저희 사이트에서도 이 문제를 확인했을 거라고 생각합니다.

또한, 이것은 보안 키를 사용하는 건가요, 아니면 TOTP 토큰을 사용하는 건가요? 어쨌든, 우리가 확인을 할 수 있도록 구체적인 재현 단계를 알려주셔야 합니다(개발 환경에서든, try.discourse.org에서든).

3개의 좋아요

참고로, Caddy 포럼에서 관련 로그 오류가 발견되지 않은 것 같습니다.

2개의 좋아요

스레드를 서로 연결해 주셔서 감사합니다!

좋은 지적입니다. 2단계 인증 백업 코드가 활성화된 경우에만 문제가 발생하는 것으로 확인되었습니다. 새로운 세부 사항과 재현 단계를 업데이트하여 게시글을 수정했습니다.

1개의 좋아요

@tshenry, 이 재현 단계에 대해 어떻게 생각하세요? 순서가 조금 이상하게 느껴집니다.

1개의 좋아요

이메일을 여러 번 업데이트해야 한다는 뜻으로 말한 것이 아닙니다. 백업 코드가 활성화된 경우에만 이메일 인증이 실패하고, 그렇지 않으면 실패하지 않음을 나타내기 위한 것입니다.

여기에는 분명히 버그가 있습니다. 재현 단계를 조금 더 구체적으로 정리하면 다음과 같습니다:

  1. TOTP로 2FA 설정
  2. 백업 코드 활성화
  3. 이메일 주소 변경
  4. 확인 이메일의 인증 링크 선택
  5. “Oops” 페이지가 표시됨

같은 이메일 인증 링크를 사용하더라도 백업 코드를 비활성화하면 문제가 즉시 해결된다는 것을 확인했습니다.

오류 로그에는 다음이 표시됩니다:

ActionView::Template::Error (Missing partial common/_second_factor_form_script with {:locale=>[:en_US, :en], :formats=>[:html], :variants=>[], :handlers=>[:raw, :erb, :html, :builder, :ruby]}. Searched in:
  * "/var/www/discourse/app/views"
)
/var/www/discourse/vendor/bundle/ruby/2.6.0/gems/actionview-6.0.1/lib/action_view/path_set.rb:48:in `find'

이는 여기의 이 줄과 관련이 있다고 생각합니다: https://github.com/discourse/discourse/blob/master/app/views/users_email/confirm.html.erb#L36

해당 파일은 실제로 존재하지 않습니다: discourse/app/views/common at main · discourse/discourse · GitHub

8개의 좋아요

고마워요 @arun — @eviltrout 님이 이 문제를 수정해 주실 거예요

4개의 좋아요

다음 커밋을 통해 수정되었습니다:

7개의 좋아요