Facebook Graph API不返回电子邮件

Facebook Graph API不返回电子邮件,facebook,facebook-graph-api,facebook-php-sdk,Facebook,Facebook Graph Api,Facebook Php Sdk,我有以下代码: $fb = new Facebook([ 'app_id' => $appId, 'app_secret' => $appSecret, 'default_graph_version' => 'v2.9', ]); $oAuth2Client = $fb->getOAuth2Client(); $tokenMetaData = $oAuth2Client->debugToken($accessToken); dump($to

我有以下代码:

$fb = new Facebook([
    'app_id' => $appId,
    'app_secret' => $appSecret,
    'default_graph_version' => 'v2.9',
]);

$oAuth2Client = $fb->getOAuth2Client();
$tokenMetaData = $oAuth2Client->debugToken($accessToken);
dump($tokenMetaData);

$graphUser = $fb->get('/me?fields=first_name,last_name,email', $accessToken)->getGraphUser()->asArray();
dump($graphUser);
上面的输出如下所示:

$metaData

 [
   "app_id" => "..."
   "application" => "My App Name"
   "expires_at" => "2017-07-01 11:40:09.000000"
   "is_valid" => true
   "issued_at" => "2017-05-02 11:40:09.000000"
   "metadata" => array:2 [
     "auth_type" => "rerequest"
     "sso" => "ios"
    ]
    "scopes" => array:2 [
      0 => "email"
      1 => "public_profile"
    ]
    "user_id" => "102..."
  ]
}
array:3 [
  "first_name" => "John"
  "last_name" => "Smith"
  "id" => "102...",
]
$graphUser

 [
   "app_id" => "..."
   "application" => "My App Name"
   "expires_at" => "2017-07-01 11:40:09.000000"
   "is_valid" => true
   "issued_at" => "2017-05-02 11:40:09.000000"
   "metadata" => array:2 [
     "auth_type" => "rerequest"
     "sso" => "ios"
    ]
    "scopes" => array:2 [
      0 => "email"
      1 => "public_profile"
    ]
    "user_id" => "102..."
  ]
}
array:3 [
  "first_name" => "John"
  "last_name" => "Smith"
  "id" => "102...",
]
如您所见,
$metaData
中的
作用域
显然包含
电子邮件
,因此这不是权限问题。尽管如此,图形用户有时没有电子邮件(尽管在某些情况下有)


这是为什么?如何解决此问题?

我通过指定graph api版本解决了此问题

我请求的字段
姓名、姓氏、电子邮件、图片

到url:
https://graph.facebook.com/me

没有返回电子邮件

到url:
https://graph.facebook.com/v2.9/me

我确实回过邮件


希望这有帮助。

首先检查您的访问令牌是否获得了用户的电子邮件许可

https://graph.facebook.com/me/permissions?
  access_token=(access-token)
  &debug=all
如果答案中没有显示此内容:

{
    "data": [
        {
            "permission": "email",
            "status": "granted"
        },
        {
            "permission": "public_profile",
            "status": "granted"
        }
    ]
}
可能在获取您的访问令牌时,我没有请求邮件所有权:将scope=email添加到请求中

https://www.facebook.com/v2.10/dialog/oauth?
  client_id=(app-id)
  &redirect_uri=(redirect-uri)
  &scope=email

将所需字段添加到请求的URL:

https://graph.facebook.com/me?fields=email,name

您必须检查这些步骤

  • 检查您的访问令牌是否获得用户对电子邮件的权限。要登录到应用程序的开发人员帐户,请单击工具->图形api浏览器,然后启用用户对电子邮件的权限

  • 检查facebook版本,使用最新版本

  • 在face book登录脚本中添加电子邮件范围,如下所示

    app.get(
        '/auth/facebook',
        passport.authenticate('facebook', {
          scope: ['user_location', 'email', 'user_friends']
        })
      );
    


  • 我今天遇到的一种可能性是,如果我注册的帐户没有使用我的
    电子邮件ID
    登录,可能是使用
    手机号
    登录
    ,甚至在我的个人资料中
    主电子邮件
    也没有设置或设置为
    手机号
    ,在这种情况下,
    facebook
    email
    返回null

    我已经更新了帐户并将电子邮件添加到
    facebook页面
    settings
    下的
    primary email
    字段中,然后我能够从
    facebook
    获取
    电子邮件id

    希望这对别人有帮助


    快乐编码…

    API将只返回确认的电子邮件地址。还有一系列其他因素,比如隐私设置,也会影响这一点。因此,不要编写应用程序,使其依赖于从API获取电子邮件地址。如果许多用户只使用手机注册,他们在Facebook上没有任何记录。@CBroe请写下您的评论作为答复,以便我可以接受it@YahyaUddin此外,还有很多用户实际上是通过手机注册的&他们的帐户上根本没有电子邮件。我指定了版本,所以这似乎不是问题所在