Ich verwende Discourse als Identitätsanbieter für meine Rails-Anwendung (Sie melden sich bei meiner Rails-App mit Ihrem Discourse-Login an; nicht umgekehrt). Ich möchte auf den Benutzerprofilseiten in Discourse einen Link hinzufügen, der Sie zu deren jeweiligen Profilen in meiner Rails-App führt. Um das zu tun, müsste Discourse deren Benutzer-ID in meiner Rails-Anwendung/Datenbank kennen.
Ich weiß, dass DiscourseConnect die ‘external_id’ speichert, wenn man es andersherum macht (sich bei Discourse mit einem anderen Login anmeldet). Aber speichert es etwas, wenn es in diese Richtung geht?
Das tut es nicht, daher benötigen Sie etwas Benutzerdefiniertes.
Ich frage mich, ob es mehr Sinn machen würde, dies in Ihrer Rails-App zu behandeln, da diese die Discourse-ID eines Benutzers kennt?
Sie könnten eine Route wie /profile-by-discourse-id/:discourse_id einrichten, die den relevanten Benutzer anhand der Discourse-ID nachschlägt und dann zur Benutzerprofil in der Rails-App weiterleitet.
Danke @david. Lustigerweise ist das genau das, was ich für die Verknüpfung in die andere Richtung getan habe (von meinen Rails-App-Benutzerprofilen zu Discourse-Benutzerprofilen) über dieses Discourse-Plugin (/user-by-id/123/summary), da meine Rails-App die Discourse-Benutzer-ID anstelle des Benutzernamens speichert (da Benutzernamen sich ändern können).
Diese Lösung würde in die andere Richtung funktionieren, außer der Tatsache, dass nicht alle Forenbenutzer Benutzerprofile in meiner Rails-App haben. Ein Rails-Benutzer wird erst erstellt, wenn der Discourse-Benutzer der Organisation beitritt, während das Discourse-Forum auch Nicht-Mitglieder enthalten kann.
Ich schätze, meine beiden Optionen sind also:
A) Erstellen eines JavaScript-Plugins, das eine Ajax-Anfrage an meine Rails-App sendet, um festzustellen, ob der Discourse-Benutzer auch ein Benutzer in der Rails-App ist, und wenn ja, einen Link rendern; oder
B) Zum Zeitpunkt der Erstellung des Rails-App-Benutzers und der Verknüpfung mit dem Discourse-Benutzer, zusätzlich zur Speicherung der Discourse-Benutzer-ID in der Rails-App-Datenbank, irgendwie die Rails-Benutzer-ID im Discourse-Benutzerprofil speichern (z. B. als benutzerdefiniertes Benutzerfeld).
Ich denke, (B) ist die bessere Lösung (vorausgesetzt, das benutzerdefinierte Benutzerfeld ist nicht änderbar, außer durch Administratoren), obwohl ich mit benutzerdefinierten Feldern nicht vertraut bin oder ob sie über die API zugänglich sind.
EDIT: Jetzt erinnere ich mich, als ich das letzte Mal danach geschaut habe: Das Problem ist, dass benutzerdefinierte Benutzerfelder vom Benutzer bearbeitbar sind, was sie zu einem schlechten Ort macht, um eine systemgenerierte Referenz wie diese zu speichern