API経由でオフサイトアバター?

コミュニティ向けRailsサイトを持っています。コミュニティメンバーがDiscourseに個別にログインする必要がないようSSOを採用しており、2つのサーバー間の情報交換を円滑にするためにDiscourse APIを利用しています。現在、ユーザーのアバターを統一したいと考えています。つまり、メインサイトと同じアバターをフォーラムでも表示したいのです。その方法はありますか?

通常、APIリクエストで行っているように、Faradayを使ってhttps://discuss.diem25.org/uploads.jsonに対してPOSTリクエストを送信しました。ヘッダーにはAPIキーとAPI-Usernameを含め、以下のようなボディを指定しました。

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

しかし、このリクエストは「Internal Server Error」を返してしまいます。最終手段としてファイルを再アップロードすることも検討していますが、Faradayを使うと最初は難しそう、あるいは不可能に見えるため、他の方法を探しています。

「いいね!」 1

SSO がアバターを上書き というサイト設定を試してみて、SSO システムと一緒にアバター URL を渡すのはどうでしょうか?API で手動でアップロードするよりも、SSO で対応する方がよいかもしれません。

「いいね!」 5

ありがとうございます、良いアイデアですね。ただ、このアプローチは統合の問題を逆転させることになります。現在、Discourse にアバターがあるユーザーが、私のサイトにはアバターを持っていないからです。私の選択肢は、Discourse のアバターをすべて私のサイトにアップロードして「SSO がアバターを上書き」を設定するか、私のサイトのアバターをすべて Discourse にアップロードすることのようです。:unamused:

「いいね!」 3

それは、Faraday でファイルの URL を直接指定できないためだと思います。まずファイルを読み込む必要があるか、同様の処理が必要でしょう。

ただし、discourse_api gem を使用して、URL を指定してアバターを更新することは可能です。

client.update_avatar(
  username: "norbert6",
  url: "http://vignette1.wikia.nocookie.net/despicableme/images/1/15/Jerryindespicableme.png"
)
「いいね!」 2