Discourse IDにFacebookでログインできません

meta.discourse.org のメタサイトで、Facebookソーシャルログインが削除され、Discourse IDへの切り替えが推奨されているというバナーを見ました。そこで、Discourse IDへのリンクをクリックし、Facebookでサインインを試みましたが、失敗しました。

Facebookの設定が正しくないようです。Facebookログインはまだ機能しないため、11月30日の締め切りを延長すべきだと思います。

機能が利用できません

このアプリでは、追加の詳細情報を更新中のため、現在Facebookログインは利用できません。後でもう一度お試しください。

「いいね!」 2

ダン、レポートありがとうございます。Facebookアカウントでログインできましたが、App Reviewプロセスが変更されていることに気づいたため、レビューのリクエストを提出しました。Facebookアプリは特別なことは何もせず、Facebook経由でのログインを有効にするだけですが、それでもMeta(Facebook)によるレビューが必要です。できるだけ早くレビューされることを願っています。

レビューがどれだけ早く進むかによって、ここでMetaの締め切りを延長することを検討します。

「いいね!」 2

Facebookログインでよくある落とし穴は、Facebookアプリの「開発者」としてFacebookの管理設定に記載されているユーザーでは機能するのに、一般ユーザーでは機能しないことです。

Facebookログインのテストに関するFacebookのガイドに従うことで、問題を再現できると思います。

「いいね!」 1

良い提案、ありがとうございます。ちょうどそれを実行し、アプリの管理者または開発者ではない使い捨てアカウントでログインしました。この画面が表示されました。

「いいね!」 1

今は少し改善されましたが、まだ完全に機能していません。リダイレクトURLが間違ったURLに設定されていると思います。

再現手順:

  • id.discourse.com にアクセスします(すでにログインしている場合はログアウトしてください)。
  • id.discourse.com のホームページで「Log in」をクリックします。
  • 「Facebook」をクリックします。
  • 次に、名前とメールアドレスを入力するように求められるか、すでにFacebookでログインしている場合は、「以前にFacebookでDiscourse Login (Discourse ID)にログインしました。続行しますか?」と表示されます。
  • 「[名前]として続行」をクリックします。
  • meta.discourse.org(id.discourse.comではありません!)のこのページにリダイレクトされます:https://meta.discourse.org/auth/failure?message=csrf_detected&strategy=discourse_id#_=_\。「申し訳ありませんが、認証がタイムアウトしたか、ブラウザを変更しました。もう一度お試しください。」と表示されます。

それらの手順に従うと、id.discourse.com のホームページにリダイレクトされます。メタにはリダイレクトされません。ID にログインし、ID のホームページが表示されます。

ただし、:thinking: 以前のメタログイン試行から何か残っている可能性があります… 別のブラウザで再現できますか?

macOS 26.1 で、Chrome 142.0 ではバグが再現しましたが、Safari 26.1 では再現しませんでした。

Chrome Dev Tools で、以下のようなものが見られました。機密性の高い部分(code および state パラメータ)は REDACTED に置き換えられています。

そして、https://meta.discourse.org/auth/failure?message=csrf_detected&strategy=discourse_id にリダイレクトされ、200 OK になりました :roll_eyes:

「いいね!」 3

ありがとうございます。特定の条件下で再現できることがわかりました。何が起こっているのか理解できたと思います。

ユーザーがメタから認証を開始すると、IDインスタンスに destination_url の値を保存し、認証後にユーザーを元の場所に戻せるようにします。しかし、認証が短時間で完了しない場合(失敗するか、ユーザーが認証を中止した場合)、その destination_url はクリーンアップされず、ユーザーのブラウザセッションに残ります。次にユーザーがログインしようとすると、IDはそのURLにリダイレクトしようとしますが、元の認証フローからの古いコード/状態の組み合わせがあるため、リダイレクトは「申し訳ありませんが、承認がタイムアウトしました」というエラーになります。

短時間経過後にリダイレクトしないようにする必要があります。destination_url の値が10分後にクリーンアップされるようにする必要があります。認証のコード/状態の組み合わせは10分間しか有効ではないと思いますが、確認が必要です。

「いいね!」 3