我有以下代码:
$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);
以上输出如下:
$元数据:
[
"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..."
]
}
$ graphUser :
array:3 [
"first_name" => "John"
"last_name" => "Smith"
"id" => "102...",
]
正如您所看到的,scopes
中的$metaData
显然有email
所以它不是一个权限问题。尽管如此,图表用户有时没有电子邮件(尽管在某些情况下它确实如此)。
为什么会这样,我该如何解决这个问题?
答案 0 :(得分:5)
将您需要的字段添加到请求的网址中:
https://graph.facebook.com/me?fields=email,name
答案 1 :(得分:2)
首先检查您的访问令牌是否获得用户对电子邮件的许可
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
答案 2 :(得分:1)
我通过指定图形api版本解决了这个问题。
我要求的字段first_name,last_name,email,picture
要网址:https://graph.facebook.com/me
没有回复电子邮件。
要网址:https://graph.facebook.com/v2.9/me
回复电子邮件。
希望这有帮助。
答案 3 :(得分:1)
您必须检查以下步骤。
检查您的访问令牌是否获得了用户对电子邮件的许可。对于该登录名到您应用程序的开发人员帐户,然后使用tools-> graph api explorer,然后启用用户对电子邮件的许可。
检查facebook版本,使用最新版本。
在人脸书登录脚本中添加电子邮件范围,如下所示
app.get(
'/auth/facebook',
passport.authenticate('facebook', {
scope: ['user_location', 'email', 'user_friends']
})
);
或
FB.login(function(response) {
// your ajax script
},{
scope: 'email',
return_scopes: true
});
答案 4 :(得分:1)
我今天遇到的一种可能性是,如果我注册的帐户未使用email ID
登录,则可能是使用mobile number
至login
,甚至在我的个人资料primary email
未设置或设置为mobile number
,在这种情况下,facebook
返回email
的null。
我已经更新了帐户,并向primary email
中settings
下的facebook page
的{{1}}字段中添加了电子邮件,然后我就可以从email id
中获得facebook
。
希望这对某人有帮助。
快乐的编码...