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
您必须检查这些步骤
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此外,还有很多用户实际上是通过手机注册的&他们的帐户上根本没有电子邮件。我指定了版本,所以这似乎不是问题所在