私はRailsアプリケーションのIDプロバイダーとしてDiscourseを使用しています (私のRailsアプリにDiscourseログインでサインインするのであって、その逆ではありません)。Discourseのユーザープロフィールページに、それぞれのユーザーの私のRailsアプリのプロフィールに移動するためのリンクを追加したいと考えています。そのためには、Discourseが私のRailsアプリケーション/データベースでのユーザーIDを知る必要があります。
DiscourseConnectは、その逆 (他のログインでDiscourseにサインインする)を行う場合に「external_id」を保存することは知っています。しかし、この方法で保存されるものはありますか?
もしなければ、保存するためのアドバイスはありますか?
「いいね!」 1
david
(David Taylor)
2024 年 1 月 8 日午後 7:08
2
Wilson29thID:
この向きだと何も保存されませんか?
保存されないので、カスタムのものが必要になります。
DiscourseのIDを知っているRailsアプリでこれを処理する方が理にかなっているのではないでしょうか?
/profile-by-discourse-id/:discourse_id のようなルートを設定し、Discourse IDに基づいて関連ユーザーを検索してから、Railsアプリのユーザープロフィールにリダイレクトすることができます。
「いいね!」 1
@david 、ありがとうございます。面白いことに、それはまさに私が他の方向(私のRailsアプリのユーザープロファイルからDiscourseのユーザープロファイルへ)をリンクするために行ったことと同じです。このDiscourseプラグイン (/user-by-id/123/summary)を使用しました。私のRailsアプリはユーザー名ではなくDiscourseのユーザーIDを保存しているため(ユーザー名は変更される可能性があるため)です。
そのソリューションは、すべてのフォーラムユーザーが私のRailsアプリにユーザープロファイルを持っているわけではないという事実を除けば、逆方向にも機能するでしょう。Railsのユーザーは、Discourseのユーザーが組織に「参加」したときにのみ作成されますが、Discourseフォーラムには非メンバーを含めることができます。
したがって、私の2つの選択肢は次のようになると思います。
A) Ajaxリクエストを私のRailsアプリに送信して、DiscourseユーザーがRailsアプリのユーザーでもあるかどうかを判断し、もしそうであればリンクを表示するJavaScriptプラグインを作成する。または
B) Railsアプリのユーザーが作成され、Discourseユーザーにリンクされた時点で、RailsアプリデータベースにDiscourseユーザーIDを保存するだけでなく、何らかの方法でRailsユーザーIDをDiscourseユーザープロファイルに保存する(例:カスタムユーザーフィールドとして)。
カスタムユーザーフィールドに慣れていないことや、APIからアクセスできるかどうかはわかりませんが、(B)の方が良い解決策だと感じています。
編集:これを最後に調べたときに思い出したのですが、問題はカスタムユーザーフィールドはユーザーが編集できるため、システム生成の参照を保存する場所としては不適切であるということです。