2 段階認証のバックアップコードが有効な場合、新しいメールアドレスの確認ができない

「2 要素認証のバックアップコード」が有効になっている場合、新しいメールアドレスの確認が以下のエラーで失敗します。

おっと

このディスカッションフォーラムを動かしているソフトウェアで予期せぬ問題が発生しました。ご迷惑をおかけして申し訳ありません。

エラーに関する詳細情報はログに記録され、自動的に通知が生成されました。確認いたします。

それ以上の操作は不要です。ただし、エラーが継続する場合は、エラーの再現手順などを含めた追加情報を、サイトのフィードバックカテゴリにトピックを投稿して提供してください。

これは複数の Discourse 環境で発生しており、特定の環境に限定されるものではありません。

「2 要素認証のバックアップコード」機能を無効にすると問題が解消され、メール確認が正常に完了します。

問題の再現手順:

  • 任意の Discourse 環境(テストには https://try.discourse.org/ を使用可能)でアカウントを開始
  • TOTP を使用して 2FA を設定(物理セキュリティキーでのテストは実施していません)
  • アカウントのメールアドレスを変更
  • 新しいメール受信トレイに送信された確認メールをクリック。確認が成功する点に注意
  • 2FA 設定で「2 要素認証のバックアップコード」を有効化
  • アカウントのメールアドレスを再度変更
  • 最新のメール受信トレイに送信された確認メールをクリック。前述のエラーで確認が失敗する点に注意
  • 「2 要素認証のバックアップコード」を無効化
  • メールアドレスを再度変更
  • 最新の宛先に送信された確認メールをクリック
  • TOTP コードの入力を求められます
  • 今回は最新のメールアドレスの確認が正常に完了します
「いいね!」 4

管理者としてログインした状態で、Web ブラウザの /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