Avatar außerhalb des Standorts über API?

Ich betreibe eine Community-Website mit Rails. Ich verwende SSO, damit Community-Mitglieder sich nicht separat bei Discourse anmelden müssen, und ich nutze die Discourse-API, um den Informationsaustausch zwischen den beiden Servern zu ermöglichen. Jetzt möchte ich die Benutzer-Avatare vereinheitlichen, also denselben Avatar im Forum wie auf meiner Hauptseite verwenden. Wie gehe ich dabei vor?

Ich habe versucht, was ich normalerweise für API-Anfragen tue, nämlich eine Faraday-POST-Anfrage an https://discuss.diem25.org/uploads.json mit API-Schlüssel und API-Benutzername im Header sowie folgendem Body:

{ 
          "type": "avatar", 
          "user_id": user_id,
          "file": "https://internal.diem25.org/.../user.jpg",
          "synchronous": "true"
        }

Diese Anfrage führt zu einem Internal Server Error. Ich wäre auch nicht abgeneigt, die Datei als letzten Ausweg neu hochzuladen, aber das scheint auf den ersten Blick schwierig bis unmöglich zu sein, wenn man Faraday verwendet.

1 „Gefällt mir“

Warum nicht die Site-Einstellung sso overrides avatar ausprobieren und die Avatar-URL über das SSO-System übergeben? Es könnte besser sein, dies über SSO zu lösen, anstatt Uploads manuell über die API durchzuführen.

5 „Gefällt mir“

Danke, das ist eine gute Idee. Es stellt das Integrationsproblem nur umgekehrt dar, denn aktuell haben einige Nutzer einen Avatar auf Discourse, aber keinen auf meiner Seite. Meine Optionen scheinen also zu sein, entweder alle Discourse-Avatare auf meine Seite hochzuladen und dann „SSO überschreibt Avatar

3 „Gefällt mir“

Ich denke, das liegt daran, dass man in Faraday nicht einfach eine URL für eine Datei angeben kann. Sie muss erst als Datei eingelesen werden oder ähnliches.

Du kannst jedoch das discourse_api-Gem verwenden, um ein Avatar-Bild zu aktualisieren, indem du eine URL angibst:

client.update_avatar(
  username: "norbert6",
  url: "http://vignette1.wikia.nocookie.net/despicableme/images/1/15/Jerryindespicableme.png"
)
2 „Gefällt mir“