ソーシャルログインがデスクトップでのみ機能し、モバイルデバイスでは機能しない(CSRF検出)

こんにちは、

私のDiscourseフォーラムでソーシャルログイン(Google、Discord、LinkedIn)に問題が発生しています。

  • デスクトップでは、すべてのソーシャルログインが正常に機能します。

  • すべてのモバイルデバイス(iOS/Android、Safari/Chrome/Firefox)では失敗します。

モバイルでの手順:

  1. ソーシャルログインが通常どおり開きます。

  2. 私のサイトにリダイレクトされた後、ホームページにのみアクセスしログインできていません

ログには毎回次のように表示されます。

(google_oauth2) Authentication failure! csrf_detected

または

(discord) Authentication failure! invalid_credentials: invalid_request

確認済みの事項:

  • OAuth設定は正しい(デスクトップで機能している)

  • デバイスのCookie/キャッシュを削除した

  • アプリ内ブラウザではなく、実際のブラウザでテストした

  • どのモバイルブラウザでも → 常にCSRFが検出される

質問:

Discourseで、モバイルデバイスでのみセッション/Cookieを失い、csrf_detectedで中断される原因として考えられるものは何でしょうか?

どんな助けでも感謝します!:folded_hands:


これは標準のインストールですか?そうでない場合、force_https は有効になっていますか?

こんにちは、はい、それは標準的なDiscourseのインストールです(Hetznerサーバーにインストールされています)。

モバイルデバイスでソーシャルログイン(Google、Discordなど)がPCでは機能するのにcsrf_detectedで失敗する問題の解決策を見つけました。

原因は私のテーマにありました:

テーマの\u003chead\u003eセクションにあるカスタムJavaScriptスクリプトが、モバイルデバイスでページを絶えずリロードしていました(window.location.replace)。

この強制的なリダイレクトが、Google/Discordのコールバック後にセッション検証に必要となる一時的なCSRFトークンを破壊していました。

解決策:

モバイル表示を強制するスクリプト全体をテーマから削除しました。

同様の問題を抱えていてカスタムテーマを使用している場合は、リダイレクトを引き起こすスクリプトが実行されていないか確認してください。私の場合はそれが原因でした!