Benutzeravatar per API löschen

Hallo!

Wir haben eine Discourse-Forum-App, die über SSO mit unserer App verbunden ist. Benutzer-Avatare werden direkt darüber aktualisiert. Da unsere Fotos jedoch moderiert werden, müssen wir die Benutzer-Avatare auf der Discourse-App-Seite zurücksetzen.

Ist dies über die REST-API oder durch Erweiterungen des SSO-Mechanismus möglich? Ich konnte diese Information in der Dokumentation nicht finden.

Vielen Dank!

Sie sollten die sync_sso-Route aufrufen können, um den Benutzer-Avatar erneut zu synchronisieren. Alternativ können Sie eine PUT-Anfrage an http://localhost:3000/u/<username>/preferences/avatar/pick mit einer leeren upload_id senden.

Dadurch wird der aktuelle Avatar des Benutzers gelöscht und ein Buchstaben-Avatar zugewiesen.

@blake Fehler beim Senden dieser Anfrage. Ich habe eine POST-Anfrage verwendet.
{
“failed”: “FAILED”
}

Hast du, wie empfohlen, eine PUT-Anfrage versucht?

@pfaffman Entschuldigung, ich habe ‘put’ verwendet

Wenn Sie sso overrides avatar aktiviert haben, müssen Sie den Endpunkt sync_sso verwenden.

Wir verwenden den SSO-Endpunkt, aber das Benutzeravatar wird nur bei der Anmeldung aktualisiert. In unserem Fall muss es manuell aktualisiert werden.

Ja, das ist völlig in Ordnung. Du kannst jederzeit manuell eine POST-Anfrage an den sync_sso-Endpunkt senden.

Könntest du bitte einen Link zur API-Dokumentation für diesen Endpunkt hinzufügen?

Hier ist ein Ruby-Code-Beispiel, das die discourse_api-Gemeinde verwendet, damit du es als Referenz nutzen kannst. Der sync_sso-Endpunkt unterscheidet sich etwas von anderen Endpunkten, da du ihm eine signierte Nutzlast senden musst.

client = DiscourseApi::Client.new('host')
client.api_key = 'api_key'
client.api_username = 'api_username'
puts client.sync_sso(
  sso_secret: 'abcdefghij',
  username: '24db27218ed09205a5a0',
  name: '24db27218ed09205a5a0',
  email: '24db27218ed09205a5a076983bf241ab@example.com',
  external_id: '684',
  avatar_url: 'https://d3bpeqsaub0i6y.cloudfront.net/user_avatar/meta.discourse.org/codinghorror/240/110067_2.png',
)

Habe ich das richtig verstanden, dass wir POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=... senden können?

Sind die Parameter ‘sso’ und ‘sig’ ähnlich wie die beim SSO-Autorisierungsfluss?

Ich habe versucht, die oben beschriebene Anfrage durchzuführen POST /admin/users/sync_sso?api_key=...&api_username=...&sso=...&sig=..., und sie hat mit 200 und meinem Benutzer geantwortet, aber das Benutzer-Avatar wurde nicht aktualisiert, ohne dass Log-Ereignisse entstanden sind. Was mache ich falsch?

Sie sollten den api_key und den api_username im HTTP-Header angeben, da die Verwendung in den Abfrageparametern veraltet ist.

Ich vermute, dass es im Code einen Schutzmechanismus gibt, der versehentliches Löschen eines Avatars verhindert, wenn das Feld fehlt oder leer ist. Sie müssen höchstwahrscheinlich eine URL zu einem Standard-Avatar angeben, um den bestehenden Avatar zu ersetzen.

Ich habe API-Anmeldedaten durch Header ersetzt. Die SSO-Synchronisation hat das Benutzer-Avatar nicht mit dem bereitgestellten aktualisiert. Obwohl der Sidekiq-Job in diesem Aufruf erfolgreich abgeschlossen wurde, gab es keine Fehler- oder Warnmeldungen in den Logs.

Du kannst in den Site-Einstellungen detaillierte SSO-Protokolle aktivieren, um zu prüfen, ob dort Einträge erscheinen.

Ist die angegebene avatar_url öffentlich? Deine Discourse-Site muss darauf zugreifen können.