このの後に、JWT を使用して SSO を動作させることができました。
discourse-omniauth-jwt ライブラリを使用しているため、サインイン後のリダイレクト方法がわかりません。
ユーザーが私のサイトにログインすると、JWT を取得し、即座に Discourse 側でもサインインさせます。このフローの終了時に、ユーザーは私のサイトではなく Discourse サイトに留まってしまいます。
origin パラメータや、ここにある destination_url クッキーを含む、omniauth ライブラリのリダイレクト方法を確認してみましたが、どれも機能しませんでした。
もしかしたら @eviltrout さんに教えていただけるかもしれません。
編集:omniauth と Discourse の omniauth コールバックという、2 つの異なるライブラリを見ていたことに気づきました。いずれにせよ、これをどう実現すればよいかわかりません。
「いいね!」 1
eviltrout
(Robin Ward)
2
つまり、この問題の核心は以下の通りです:
- ユーザーがあなたのサイトにログインする
- あなたがユーザーを Discourse にリダイレクトして、そこでログインさせる
- ユーザーが Discourse でログイン状態になる?
これはサポートされているフローではないと思います。一般的には、ユーザーは Discourse にいて「ログイン」をクリックし、認証のためにあなたのサイトを訪れた後、元に戻ってくるという流れになります。ユーザーが直接あなたのサイトでログインする場合、そのサイトにとどまるべきです。
通常、このように対応します:Discourse 側ではログアウト状態に保ちつつ、「ログイン」ボタンをクリックすると、認証フォームを再度入力する必要なくリダイレクトされるようにします。
「いいね!」 7
なるほど、確かにそうですね。考えてみれば、埋め込みが認証セッションを活用できない以上、ログインしてもあまり意味がありませんね。
「いいね!」 1
したがって、埋め込みコンテンツは認証セッション(またはセッションクッキー)を利用して、非公開の Discourse トピックを表示または非表示にします。
この認証フローは理にかなっていますが、まずは、新しいタブで Discourse フォーラムにログインをリダイレクトするようにします。リフレッシュすれば、非公開トピックにアクセスできるようになります。