pnoeric
(Eric)
1
こんにちは。当コミュニティサイトでは、すでにメンバー同士が互いに「ブロック」できる機能があります。当サイトのメンバーが Discourse に SSO でログインする際、ブロックされている外部 ID のリストも一緒に渡したいと考えています。Discourse 側では、おそらく「ミュートユーザー」フィールドにそのまま入力すればよいのでしょう。
ここで質問です。SSO 発生時に「ミュート」するユーザーのリストを渡すことは可能でしょうか?SSO 時に渡せるユーザーメタデータは限られたリストしかないようで、ミュートユーザーはその選択肢に含まれていないようです。
もしそれが不可能であれば、この機能を実現するには Webhook を設定し、user_logged_in イベントを受信したら Discourse API を使ってミュートユーザーのリストを設定する必要がある、ということでしょうか?(もしそうなら、API のどのエンドポイントを呼び出せばよいのでしょうか?見つけられませんでした!)
よろしくお願いいたします!!
sam
(Sam Saffron)
2
ええ、これは他の拡張機能の SSO が既に持っている機能と多少似ているように聞こえますね。この機能が必要となるケースは非常に稀なため、プロトコルに追加するかどうかで迷っています
。
Webhook は機能します。ログイン時にコールバックが呼び出され、その後、Discourse の API を通じてリストを同期するために 2 回目の呼び出しを行うことができます。
pnoeric
(Eric)
3
こんにちは、サムさん。はい、私の直近の問題については、user_logged_in イベントの webhook に応答するだけで大丈夫です。ありがとうございます。
SSO で渡せるデータについてのあなたの立場も理解できました。Discourse を私のサイトとさらに深く統合するにつれて、貴社が SSO をどのように実装したのかについて、より理解が深まっています。現在も問題なく動作していますが、実は「SSO による上書き…」というチェックボックス群を、「SSO がすべてのユーザー属性を管理する」といったような、単一の汎用チェックボックスに統合するのは面白いかもしれません。
そのアイデアは、このグローバルな SSO チェックボックスをオンにすれば、一貫性を保つ必要があるのは external_id だけになるというものです。つまり、Discourse に対して、それが常に一意であり、常に同じユーザーを指し、決して変更されないことを約束するだけです。これが整えば、SSO リクエスト時に好きなフィールドをすべて渡して、ユーザーデータを完全に自社のデータベースから読み込むことができるようになります。