如何为非 App-Scoped 用户 ID 构建永久 public Facebook 个人资料照片 URL?

How to build a permanent and public Facebook profile photo URL for non-App-Scoped User IDs?

2020 年 10 月 24 日 Facebook will start blocking profile photos URLs 如果用户 ID 不是 App-Scoped 用户 ID (ASID)。

我们在 Facebook 切换到 ASID 之前在我们的网站上实现了 Facebook 登录,所以我们之前有很多注册用户。问题是,对于这些老用户,Facebook 向我们报告的是他们的全局用户 ID (UID) 而不是 ASID。 “对于已经登录您的应用程序的用户,ID 不会更改。它将保持锁定为用户的原始 Facebook ID。” (source). And we have found no way to get an ASID for them (these answers do not work anymore: 1 and 2)

在这些情况下,经典的 Facebook 个人资料 URL 将停止工作:

现状:

https://graph.facebook.com/4/picture

从 10 月 24 日起将无法使用:

https://graph.facebook.com/4/picture?breaking_change=profile_picture

在 JSON 身份验证令牌的“图片”参数中,我们得到一张照片 URL 但它来自 Facebook CDN,它可能会过期(每次用户登录时它都会更改,即使几乎没有时间过去)。

所以问题是:我们如何才能为实施 ASID 之前在我们网站注册的用户生成 public 稳定、永久的图片 URL?

我们无法将访问令牌添加到 URL,因为它将 public 仅在网站中使用(我们不下载图像,只是内联它们)。

Facebook API 在这里私信。此处最好的做法是根据您的请求使用 客户端令牌 来获取图像。这在大多数 Graph API 上通常是不允许的,但在这里是为了更容易迁移这样的案例。

与应用令牌不同,客户端令牌可以安全地暴露给用户,并用于此类情况。