SSOに接続:ログインエラー sso_login

問題解決のために数時間調査しましたが、あと一歩のところまできているようです。少しだけ後押しが必要かもしれません。

基本的に、すでに独自のDBに認証済みのユーザーがいるReactプロジェクトに、Discourseをヘッドレス実装として統合しようとしています。

これを実現するために、ユーザーがReactページでログインすると、Discourse APIとの認証のためのSSOを実行し、適切な関数などを呼び出せるようにします。

まず、DiscourseのURLからリダイレクトを無効にしてフェッチしています。

const response = await fetch('https://forum.mysite.com/session/sso', {
    method: 'GET',
    redirect: 'manual', // リダイレクトの自動追従を無効にする
  });

次に、検証を行い、ユーザー情報を含むペイロードをバックエンドに送信します。

const loginResponse = await fetch(newurl.toString(), {
    method: 'GET',
    headers: {
      'Content-Type': 'application/x-www-form-urlencoded',
    },
    redirect: 'manual',
  });

フォーマットや署名などは問題ないようです。しかし、エラーが発生します。そこで、これをコメントアウトし、生成されたURLをブラウザにコピーして確認したところ、以下のエラーが表示されました。

Verbose SSO log: Nonce is incorrect, was generated in a different browser session, or has expired add_groups: admin: avatar_force_update: avatar_url: bio: card_background_url: confirmed_2fa: e

少し調査したところ、これらの回答が役立ちそうですが、私の設定で何をどのように変更すればよいのかまだよくわかりません。また、force_https はもはや操作できない設定のようで、その機能もよくわかりません。

異なるブラウザセッションが原因である可能性が高いと思いますが、確信はありません。しかし、これを機能させるまであと一歩だと感じています。少しだけ後押しが必要です。何か情報があれば助かります。ありがとうございます!

それが問題のようです。discourse_connect_csrf_protection というサイト設定を無効にすることで回避できるはずです。これは隠しサイト設定で、デフォルトでは true になっています。Railsコンソールから有効にする必要があります。

コードの該当箇所はこちらです。

デフォルトでtrueに設定されている場合、falseに設定する必要があるということだと思います。今試してみます。

「いいね!」 1

これで解決したようです。情報提供ありがとうございました!自分では絶対に気づけなかったでしょう(笑)

「いいね!」 1

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.