Facebook Graph未返回电子邮件

8
更新:看起来我的个人电子邮件地址已经多年没有使用了。Facebook 将其标记为不活跃,并没有将其作为 JSON 的一部分返回。
我正在客户端使用以下 URL 对 Facebook 进行用户认证:
https://www.facebook.com/dialog/oauth?
  client_id=xxx&
  redirect_uri=https://www.facebook.com/connect/login_success.html&
  scope=email

我收到一个代码,然后将其交换为令牌:

https://graph.facebook.com/oauth/access_token?
  code=xxx&
  client_id=xxx&
  client_secret=xxx&
  redirect_uri=xxx

然后我会将令牌发送到我的服务器,并获取Fb Graph以获取一些用户信息,包括电子邮件。

 https://graph.facebook.com/me?access_token=xxx

因为某些原因,我获取了用户的所有“关于”信息,但没有获取到他/她的电子邮件

我做错了什么?


1
看这里:https://dev59.com/NGox5IYBdhLWcg3wOx1i - Sebastien C.
我用自己的Facebook账户进行了测试,我注册时使用的地址已经好几年没有使用过了!这很有可能是原因。 - Justin D.
如果您使用的是2.4版本,则必须在fields=...变量中请求电子邮件(以及任何其他公共个人资料字段)。否则,/me将只提供名称和ID。 - PalDev
@PalDev,真希望在2020年之前就找到了你的答案,这样我就不用浪费半天时间自己解决了。Facebook文档仍然有点靠不住,他们仍然没有更新说明这在2020年是适用的(或者像你的答案一样是2015年!) - joedotnot
1个回答

5
根据Facebook文档
默认情况下,查询节点或边时不会返回所有字段。您可以通过“fields”查询参数选择要返回的字段(或边)。这对于使API调用更有效和快速非常有用。
此功能从v2.4开始生效(以前版本检索了一些默认字段)。
当您注册新的应用程序时,您自动获得三个权限:电子邮件、public_profile和user_friends,无需手动审核。在您的代码中,“email”处于范围内(很好),所以只需更改查询如下:
https://graph.facebook.com/me?access_token=xxx&fields=email

您可能希望获取先前API版本中自动获取的public_profile字段。为此,请将"public_profile"添加到您的范围(scope)中:

https://www.facebook.com/dialog/oauth?
  client_id=xxx&
  redirect_uri=https://www.facebook.com/connect/login_success.html&
  scope=email,public_profile

现在将用户名称字段添加到您的查询中:

https://graph.facebook.com/me?access_token=xxx&fields=first_name,last_name,gender,email,timezone,age_range,verified

祝你好运


1
我曾经也遇到过将名字作为一个整体的情况,这使得对于有多个空格的国际名字来说很难识别出名字的首尾。我按照你的方法获取了单独的名字和姓氏,并想分享一下,以便帮助其他人。 /me?fields=email,first_name,last_name - Kareem
所有的/me (public_profile) 引用可以在这里找到:https://developers.facebook.com/docs/facebook-login/permissions#reference-public_profile - Kareem

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接