アプリケーションのデータベースにはメンバー表があり、メンバーの一部に関するアプリケーション固有の情報を格納しています。その中の1つのカラムが discourse_user_id です。メンバーの Discourse プロフィールへのリンクを表示したいのですが、ユーザーIDだけでは可能でしょうか?
ユーザー名(discourse_user_name)は、ユーザーが変更する可能性があるため、同期を保つことを気にする必要がないよう、格納していません。
思いつく方法は、/admin/users/<user-id>.json に対して API リクエストを送信してユーザー名を取得することですが、メンバー一覧(インデックスページ)で各メンバーのプロフィールへのリンクを表示する場合、この方法では大量のリクエストが発生してしまいます。
もう一つ考えられるのは、プラグインを作成して新しいルートを追加することですが、これはおそらく私だけが疑問に思っていることではないはずなので、それほどの労力をかける前に、すでに別の解決策があるか確認したく思いました。
pfaffman
(Jay Pfaffman)
2
ユーザーレコードに外部IDを格納し、/by-external/:external_id を使用する一案があります。もう一つは、ユーザー名が変更された場合に外部データベースに通知するウェブフックを使用する方法です。また、ユーザー名の変更を無効にするという選択肢もあります。discourse/config/routes.rb を素早く確認しましたが、user_id を使用するルートは見当たりませんでした。
@pfaffman さん、ありがとうございます。とても参考になりました。外部 ID を使用するのが理想的だと思います。それにより、双方向のリンク という別の問題も解決できます。
ただ、API ドキュメントや REST クライアントを調べても、そのフィールドを更新する方法が見当たりません。SSO を有効にしなくてもそれを使用できますか?(また、仮に SSO を有効にしたとしても、プログラムからそのフィールドを更新できるでしょうか?)
pfaffman
(Jay Pfaffman)
4
すみません、現時点では分かりません。ソースを確認する必要があります。
外部キーを更新する理由はありません。キーは変更されるべきではありません。
もう一つの方法として、両方のシステムでメールアドレスが同一であることを前提とすることもあります。
私の推測では、SSO(シングルサインオン)が最適解になるでしょう。
pfaffman
(Jay Pfaffman)
5
以下をお試しください:
https://SERVER/community/admin/users/list/active.json?filter=email%40hostname.com&show_emails=true
API キーは、他の場所でドキュメント化されているように、ヘッダーに含めて渡す必要があります。
「いいね!」 1
これを実現するためのプラグインを作成しました:
/user-by-id/123/summary は /u/janedoe/summary などにリダイレクトします。
これが必要だったことにまだ驚いていますが、少なくとも動作します!
「いいね!」 2