Wie kann ich mit ihrer Benutzer-ID auf ein Benutzerprofil verlinken?

Ich habe eine Tabelle namens members in der Datenbank meiner Anwendung, in der ich anwendungsspezifische Informationen über eine Teilmenge der Mitglieder speichere. Eine der Spalten ist discourse_user_id. Ich möchte einen Link zum Discourse-Profil des Mitglieds rendern. Ist das nur mit der Benutzer-ID möglich?

Ich speichere discourse_user_name nicht, da der Benutzer diesen ändern kann, und ich müsste dann befürchten, sie synchron zu halten.

Der einzige Weg, an den ich denken kann, ist eine API-Anfrage an /admin/users/<user-id>.json, um ihren Benutzernamen zu erhalten. Das wären jedoch sehr viele Anfragen auf einer Indexseite, auf der ich Mitglieder mit Links zu ihren Profilen aufliste.

Das Einzige, was mir noch einfällt, ist ein Plugin zu erstellen, das eine Route hinzufügt. Das scheint jedoch für etwas, bei dem ich erwarte, dass ich nicht der Erste bin, der danach fragt, zu viel Aufwand zu sein. Daher wollte ich prüfen, ob es bereits eine andere Lösung gibt?

Eine Idee wäre, eine externe ID im Benutzerdatensatz zu speichern und dann /by-external/:external_id zu verwenden. Eine andere Möglichkeit ist die Nutzung eines Webhooks, um Ihre externe Datenbank zu benachrichtigen, falls sich der Benutzername ändert. Eine weitere Option ist, die Änderung von Benutzernamen einfach zu deaktivieren. Bei einem kurzen Blick in discourse/config/routes.rb sehe ich keine Route, die die user_id verwendet.

Danke @pfaffman, das ist sehr hilfreich. Ich denke, eine externe ID zu verwenden wäre ideal, da sie auch ein weiteres Problem löst – die Verknüpfung in umgekehrter Richtung.

Beim Durchsuchen der API-Dokumentation und mit einem REST-Client sehe ich jedoch nicht, wie man dieses Feld aktualisieren kann. Kann ich das nutzen, ohne SSO zu aktivieren? (Und selbst wenn ich SSO aktivieren würde, könnte ich es dann programmgesteuert aktualisieren?)

Entschuldigung, das weiß ich im Moment nicht. Ich müsste mir den Quellcode ansehen.

Es gibt keinen Grund, den externen Schlüssel zu aktualisieren; Schlüssel sollen sich nicht ändern.

Eine andere Möglichkeit wäre, dass beide Systeme davon ausgehen, dass die E-Mail-Adresse identisch ist.

Meine Vermutung ist, dass du SSO verwenden möchtest.

Du kannst Folgendes ausprobieren:

https://SERVER/community/admin/users/list/active.json?filter=email%40hostname.com&show_emails=true

Wie an anderer Stelle dokumentiert, musst du den API-Schlüssel in den Headers übergeben.

1 „Gefällt mir“

Ich habe ein Plugin erstellt, um dies zu ermöglichen:

/user-by-id/123/summary leitet auf /u/janedoe/summary usw. um.

Es überrascht mich immer noch, dass ich das machen musste, aber wenigstens funktioniert es!

2 „Gefällt mir“