facebook更改后获取facebook用户个人资料图片(10月24日)

Off*_*'er 3 facebook facebook-graph-api .net-core asp.net-core

所以 facebook 改变了网站获取用户个人资料图片的方式,所有详细信息都在这里:https : //developers.facebook.com/docs/graph-api/reference/user/picture/

所以我和SOF 都获得了来自 facebook 的用户是这样的:https : //graph.facebook.com/1108834579148558/picture?type=large

现在我们得到了 facebook 提供的默认图片。

在他们编写的 facebook 文档中,我们需要附加访问令牌才能从现在开始获取用户个人资料图片,它是如何工作的?

我能想到的唯一一件事是在用户登录时 facebook 可以检索用户个人资料图片,有没有人可以帮助解决这个问题,我正在使用 .Net 核心。

Gki*_*kan 5

Facebook 在此处的新文档中解释了 2020 年 10 月之后获取用户图像的新方法,并说明了所需的更改如下:

此端点支持应用范围用户 ID (ASID)、用户 ID (UID) 和页面范围用户 ID (PSID)。目前,您可以在没有要求的情况下查询 ASID 和 UID。但是,从 2020 年 10 月 24 日开始,所有基于 UID 的查询都需要访问令牌。如果您查询 UID,因此必须包含一个令牌:

1.access_token以 Facebook 为您提供的任何形式获取

根据您的应用程序结构,您可以使用 Facebook 提供的以下任一方法来获得access_token. 您可以access_token此处找到有关FB 文档的更多信息。
应用程序访问令牌
客户端访问令牌

作为我正在使用的客户端访问令牌的示例:使用以下参数
发出 GET 请求https://graph.facebook.com/oauth/access_token

[
   "client_id"     => #FACEBOOK_CLIENT_ID, 
   "client_secret" => #FACEBOOK_CLIENT_SECRET, 
   "grant_type"    => "client_credentials",
]
Run Code Online (Sandbox Code Playgroud)

作为响应,您将获得access_token需要附加在新图像 URL 上的响应。

2. 获取带有access_token附件的完整头像 URL 。

截至 2020 年 10 月 23 日,这对我有用。完整图像格式现在是
{$this->graphUrl}/{$this->version}/{$userID}/picture?type=large&redirect=false&access_token={$access_token}

如果你设置redirect=false你会得到一个 JSON 对象作为响应:

{
    "data": {
        "height": 100,
        "is_silhouette": false,
        "url": "https://platform-lookaside.fbsbx.com/platform/profilepic/?asid=10152700727498624&height=100&width=100&ext=1606081666&hash=AeTQyGgugiSbRcB7Sxw",
        "width": 100
    }
}
Run Code Online (Sandbox Code Playgroud)

另一方面,如果您离开redirect=true或根本不设置它,您将获得图像本身,然后您可以将其保存在磁盘上或使用 url 作为图像路径。但我不确定给定的 URL 是否长期存在。我现在使用相同的 URL 差不多一个星期了,所以我认为一旦您使用有效的 access_token 请求该 URL,该 URL 将保持原样。

PHP 中的示例请求

因为我已经在 PHP 中实现了它,所以我不能给你一个示例代码,而是向你展示我在 Laravel 框架中使用 Guzzle 客户端完成它的方式。你可以看看到我的升级提供班Laravel社会名流在这里

[
   "client_id"     => #FACEBOOK_CLIENT_ID, 
   "client_secret" => #FACEBOOK_CLIENT_SECRET, 
   "grant_type"    => "client_credentials",
]
Run Code Online (Sandbox Code Playgroud)

构建自己的访问令牌的快速而肮脏的方式(不推荐)

有一种方法可以构建自己的,access_token但这应该仅用于测试目的,因为您提供了完整的凭据并且可能会被劫持。您可以通过使用您的凭据和|as 分隔符以这种格式构建一个连接的字符串来存档:{cliend_id}|{client_secret}.