Wir verwenden die API, um Discourse in unsere Website zu integrieren (über pydiscourse).
Wenn es an der Zeit ist, einen Benutzer über die API zu einer Discourse-Gruppe hinzuzufügen, verwendet pydiscourse die PUT-Methode für die Discourse-API-URL:
/admin/groups/{group_id}/members.json
…und übergibt den Benutzernamen über die Variable ‘usernames’.
Wenn der Benutzername einen “.” enthält, gibt es kein Problem, es sei denn, dieser “.” erscheint als letztes Zeichen. In diesem Fall gibt die API einen Fehler mit der Meldung zurück:
Sie haben ungültige Parameter für die Anfrage übermittelt: usernames
Ein Benutzername darf nicht mit einem Punkt enden, daher ist dies die erwartete Antwort. Ich wollte die Quelle überprüfen, aber Sie können versuchen, hier ein Konto mit einem nachgestellten Punkt zu erstellen, und es ist illegal.
Vielen Dank für die schnelle Antwort, Jay. Wissen Sie aus dem Stegreif, ob die E-Mail-Adresse des Benutzers für ‘username’ in diesem API-Endpunkt gesendet werden kann, sodass Discourse weiß, dass es den Benutzer anhand der E-Mail-Adresse nachschlagen soll? (Wir verwenden SSO, um unsere Django-App mit Discourse zu verbinden, daher sollte Discourse beide Identifikatoren für jeden Benutzer haben)
Oh! Ja, das weiß ich. Mir ist neulich aufgefallen, dass man die E-Mail-Adresse für den Endpunkt verwenden kann, der einen Benutzer zu einer Gruppe hinzufügt. Es könnte jedoch die Nicht-Admin-Route gewesen sein. Geben Sie einfach E-Mail als Feldnamen mit der Adresse an.
Wenn Sie jedoch Discourse Connect verwenden, können Sie die Gruppen bei der Anmeldung verwalten lassen, was wahrscheinlich das ist, was Sie tun möchten, anstatt sich mit der API herumzuschlagen.
Übrigens erwähnten Sie: „Es könnte die Nicht-Admin-Route gewesen sein.“
Dieser PUT-Request wäre also:
/groups/{group_id}/members.json
…mit 'email': (Benutzer-E-Mail) als Payload… und Discourse weiß einfach, dass mein Benutzer Admin-Rechte hat, um diesen Benutzer zu dieser Gruppe hinzuzufügen?
(…Entschuldigung, ich bin mir nicht sicher, warum es zwei Routen für denselben Vorgang gibt…)
Ich denke schon. Ich habe How to reverse engineer the Discourse API verwendet, um den Pfad herauszufinden. Und dann habe ich, glaube ich, den Quellcode angesehen, um zu sehen, dass die Benutzer-ID und die E-Mail-Adresse auch funktionieren.
Ja, SSO aktualisiert Gruppen nur beim Login, daher ist die API Ihre Lösung.