站外 avatar 通过 API?

我有一个基于 Rails 的社区网站。我使用了 SSO,这样社区成员就不需要分别登录 Discourse;同时,我也在使用 Discourse API 来促进两个服务器之间的信息交换。现在,我想统一用户头像,即在论坛和我的主网站上使用相同的头像。该如何实现?

我尝试了通常用于 API 请求的做法:使用 Faraday 向 https://discuss.diem25.org/uploads.json 发送 POST 请求,在请求头中包含 API 密钥和 API-用户名,并在请求体中提供以下内容:

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

该请求导致了内部服务器错误。我也不介意作为最后手段重新上传文件,但乍一看,使用 Faraday 似乎很难甚至无法实现。

为什么不尝试使用 sso overrides avatar 站点设置,并通过 SSO 系统传递头像 URL 呢?通过 SSO 处理此问题可能比通过 API 手动上传更好。

谢谢,这是个不错的主意。但这只是把集成问题反过来提了:目前有些用户在 Discourse 上有头像,但在我的网站上没有。因此,我的选择似乎是:要么将所有 Discourse 头像上传到我的网站,然后设置“SSO 覆盖头像”;要么将所有我的头像上传到 Discourse。:unamused:

我认为这是因为在 faraday 中不能直接指定文件的 URL,必须先将其作为文件读取,或者类似的操作。

不过,你可以使用 discourse_api gem,通过指定 URL 来更新头像:

client.update_avatar(
  username: "norbert6",
  url: "http://vignette1.wikia.nocookie.net/despicableme/images/1/15/Jerryindespicableme.png"
)