Facebook 电子邮件字段返回 null(即使设置并接受了“电子邮件”权限)

Posted

技术标签:

【中文标题】Facebook 电子邮件字段返回 null(即使设置并接受了“电子邮件”权限)【英文标题】:Facebook Email field return null (even if the “email” permission is set and accepted) 【发布时间】:2013-07-06 03:07:15 【问题描述】:

对于我们应用程序中的某些用户,即使用户已授予应用程序的电子邮件访问权限,电子邮件字段也会返回 NULL。 当我们借助 Debugger 工具检查范围参数和用户 Token 的有效性时,一切正常。许可电子邮件已被接受。 但是当我们向 Graph API 请求具有有效用户令牌的用户的电子邮件时,它根本不会出现。

即使用户授予电子邮件权限,是否有办法阻止应用获取他的电子邮件?

谢谢

【问题讨论】:

对于 php Sdk,这个link 可能会有所帮助! 确保您在 OAuth 调用中获得了包含 scope: ['email'] 的访问令牌。请务必使用Graph API Explorer 尝试您的访问令牌,并确保左侧的“电子邮件”权限未灰显 【参考方案1】:

我遇到了同样的问题,我想我找到了原因: 如果用户在 Facebook 中有一封未经确认的电子邮件(即 Facebook 向他发送了一封验证邮件到用户的电子邮件地址但他没有回复)即使他给了您电子邮件权限,Facebook 也不会将该电子邮件传递给您的应用程序。

如果用户有用户名(即 userName@facebook.com),我所做的就是使用他或她的 Facebook 电子邮件。

【讨论】:

我刚刚确认了这个问题。即使在明确询问用户电子邮件之后,Facebook 也不会将此信息提供给您的应用程序,直到用户确认他的电子邮件。谢谢您的回答。我追了很久。 欢迎您,如果@Benjamin Naïm 将我的答案标记为正确... :) @GlennMaynard 即便如此,Facebook 也应该在某个地方记录它,而不是让开发人员绞尽脑汁想弄清楚为什么没有收到电子邮件。 但用户可以根据需要更改用户名。因此,如果用户更改电子邮件,则保存 username@facebook.com 是没有意义的。相反,最好使用对特定用户始终唯一的 uid@facebook.com。 所以我想每个人都忘记了这样一个事实,即用户只能使用他/她的手机号码进行注册,而我认为注册不需要电子邮件,而且显然 Facebook 不会提供手机号码。 Facebook 个人资料在没有主要电子邮件联系人的情况下仍然有效。【参考方案2】:

我也有同样的问题。它在我的本地主机上运行良好,我正在使用 php SDK 进行 facebook 登录,当我提交请求时,它会返回用户的所有字段,如电子邮件、姓名等,但在服务器上它以某种方式无法正常工作。它不会返回用户电子邮件. 我在这方面做了很多研发,我有解决这个问题的办法。 :)

$profile = $facebook->api('/me?fields=email,first_name,last_name');

如果你使用 php-sdk 只是传递这样的字段,它会返回电子邮件、名字等。 希望它对你们所有人都有效。 谢谢。

【讨论】:

【参考方案3】:

所有你需要知道的:

1) Link 1

一些可能的原因:

帐户中没有电子邮件地址

帐户中没有确认的电子邮件地址

帐户中没有经过验证的电子邮件地址

用户输入了一个安全检查点,要求他们重新确认他们的电子邮件地址,但他们还没有这样做

无法访问用户的电子邮件地址

您还需要“电子邮件”扩展权限,即使对于拥有 存档的有效、确认、可访问的电子邮件地址。

2) Link 2

注意,即使您请求电子邮件权限,也不能保证 你会得到一个电子邮件地址。例如,如果有人注册 使用电话号码而不是电子邮件地址的 Facebook,电子邮件 字段可能为空。

【讨论】:

【参考方案4】:

如果用户使用他们的电话号码登录,Facebook 不会发送电子邮件。 查看 https://github.com/mkdynamic/omniauth-facebook/issues/61 上的 cmets 了解更多信息。

【讨论】:

【参考方案5】:

您必须授予电子邮件权限以及身份验证按钮。

authButton.setReadPermissions(Arrays.asList("email"));

【讨论】:

【参考方案6】:

在某些情况下,Facebook 可能没有用户的有效电子邮件地址:

email:包含有效 RFC822 电子邮件地址的字符串 - 注意:this 如果用户没有可用的电子邮件地址,则字段可能为空

见https://developers.facebook.com/docs/reference/api/user/

【讨论】:

【参考方案7】:

@ozba 解决方案不适用,因为当用户拥有未确认的电子邮件地址时,facebook 现在会显示警告消息。因此,如果您遇到此问题,则更喜欢用户使用电话号码注册。

一些可能的原因:

帐户中没有电子邮件地址(只有电话号码) 帐户中没有确认的电子邮件地址 用户进入了一个安全检查点,要求他们重新确认他们的电子邮件地址,但他们尚未这样做,因此无法访问用户的电子邮件地址。

检查:https://developers.facebook.com/bugs/298946933534016

【讨论】:

【参考方案8】:

根据documentation:

请注意,即使您请求电子邮件许可,也不能保证您会获得电子邮件地址。例如,如果有人使用电话号码而不是电子邮件地址注册 Facebook,则电子邮件字段可能为空。

这可以解释为什么有些用户有null 电子邮件!

【讨论】:

我的帐户中有一个主电子邮件,它已经过验证,但仍然没有收到【参考方案9】:

当且仅当该用户具有与其帐户关联的已确认电子邮件 ID 时,Facebook 才会向您提供该用户的电子邮件 ID。如果您的应用可以检索某些用户的电子邮件 ID,则问题可能与开发人员无关。

【讨论】:

【参考方案10】:

我已经阅读了之前的回复,但尽管其中一些回复是真实的,例如如果用户没有确认电子邮件而是手机号码,但很多时候会发生此错误,因为忽略了如何使用 FB api 图请求信息。假设您的登录已成功完成,您现在拥有访问令牌和用户 ID 等等,但仍然看不到您感兴趣的电子邮件和其他字段。确认登录状态为已连接后继续使用此请求:

FB.api(
  '/me',
  'GET',
  "fields":"id,name,birthday,email,about,cover",
  function(response) 
      // Insert your code here
  
);

取决于您请求的权限,您现在将能够根据您的需要获取更多信息。

【讨论】:

【参考方案11】:

你可以试试这个,它会起作用的 String email = user.getProperty("email").toString(); String safeEmail = user.asMap().get("email").toString();

【讨论】:

【参考方案12】:

您还需要 facebook 的一项许可。

包括 (about_me) 对 facebook 开发设置以及您的应用或代码的权限..

【讨论】:

【参考方案13】:

您只需要为您想要从 Facebook 对象获取的关于您的用户 的任何数据添加更多权限

脸书api

【讨论】:

【参考方案14】:
$loginUrl = $facebook->getLoginUrl(
  array(
    'req_perms' => 'email'
  )
);

【讨论】:

以上是关于Facebook 电子邮件字段返回 null(即使设置并接受了“电子邮件”权限)的主要内容,如果未能解决你的问题,请参考以下文章

标签字段在使用 facebook api 和 php 时返回 NULL

Facebook Android SDK 即使在许可后也没有电子邮件

即使数据存在,`User` 类型的字段也会为 Query 返回 `null`

Django:表单中的电子邮件字段返回“此字段不能为空/此字段不能为空”,即使其中有地址

Facebook Graph API 电子邮件字段出现问题

ACF 自定义字段 WP GraphQL 突然开始在 Gatsby 中返回 null,即使它曾经可以工作