Omniauth JWT のリダイレクト

このの後に、JWT を使用して SSO を動作させることができました。

discourse-omniauth-jwt ライブラリを使用しているため、サインイン後のリダイレクト方法がわかりません。

ユーザーが私のサイトにログインすると、JWT を取得し、即座に Discourse 側でもサインインさせます。このフローの終了時に、ユーザーは私のサイトではなく Discourse サイトに留まってしまいます。

origin パラメータや、ここにある destination_url クッキーを含む、omniauth ライブラリのリダイレクト方法を確認してみましたが、どれも機能しませんでした。

もしかしたら @eviltrout さんに教えていただけるかもしれません。

編集:omniauth と Discourse の omniauth コールバックという、2 つの異なるライブラリを見ていたことに気づきました。いずれにせよ、これをどう実現すればよいかわかりません。

「いいね!」 1

つまり、この問題の核心は以下の通りです:

  1. ユーザーがあなたのサイトにログインする
  2. あなたがユーザーを Discourse にリダイレクトして、そこでログインさせる
  3. ユーザーが Discourse でログイン状態になる?

これはサポートされているフローではないと思います。一般的には、ユーザーは Discourse にいて「ログイン」をクリックし、認証のためにあなたのサイトを訪れた後、元に戻ってくるという流れになります。ユーザーが直接あなたのサイトでログインする場合、そのサイトにとどまるべきです。

通常、このように対応します:Discourse 側ではログアウト状態に保ちつつ、「ログイン」ボタンをクリックすると、認証フォームを再度入力する必要なくリダイレクトされるようにします。

「いいね!」 7

Hmm right makes sense. Logging in doesn’t do much now that I think about it since the embed can’t make use of the auth session.

「いいね!」 1

したがって、埋め込みコンテンツは認証セッション(またはセッションクッキー)を利用して、非公開の Discourse トピックを表示または非表示にします。

この認証フローは理にかなっていますが、まずは、新しいタブで Discourse フォーラムにログインをリダイレクトするようにします。リフレッシュすれば、非公開トピックにアクセスできるようになります。