Facebook Graph API 不返回电子邮件
Posted
技术标签:
【中文标题】Facebook Graph API 不返回电子邮件【英文标题】:Facebook Graph API not returning email 【发布时间】:2017-09-29 23:10:52 【问题描述】:我有以下代码:
$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...",
]
如您所见,$metaData
中的scopes
显然具有email
,因此这不是权限问题。尽管如此,图用户 sometimes 没有电子邮件(尽管在某些情况下有)。
为什么会这样,我该如何解决这个问题?
【问题讨论】:
API 只会返回确认的电子邮件地址。还有许多其他因素,例如隐私设置也会影响这一点。因此,不要编写您的应用程序,使其依赖从 API 获取电子邮件地址。如果仅使用手机注册,许多用户在 Facebook 上没有存档。 @CBroe 请写下您的评论作为答案,以便我接受 @YahyaUddin,另外,有很多用户实际上是通过手机注册的,他们的帐户上根本没有电子邮件。很老了,可能会对某人有所帮助 【参考方案1】:我今天遇到的一种可能性是,如果我正在注册一个我没有使用我的email ID
登录的帐户,可能会使用mobile number
到login
,甚至在我的个人资料中primary email
是未设置或设置为 mobile number
,在这种情况下,facebook
为 email
返回 null。
我已经更新了帐户并将电子邮件添加到facebook page
中settings
下的primary email
字段,然后我能够从facebook
获得email id
。
希望这对某人有所帮助。
编码愉快...
【讨论】:
【参考方案2】:您必须检查这些步骤。
检查您的访问令牌是否获得了用户对电子邮件的许可。登录到您的应用程序的开发者帐户,然后工具->graph api explorer,然后启用用户对电子邮件的权限。
检查 facebook 版本,使用最新版本。
在 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
);
【讨论】:
【参考方案3】:将您需要的字段添加到您的请求的 URL:
https://graph.facebook.com/me?fields=email,name
【讨论】:
【参考方案4】:首先检查您的访问令牌是否获得用户对电子邮件的许可
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
【讨论】:
【参考方案5】:我通过指定图形 api 版本解决了这个问题。
我请求的字段first_name,last_name,email,picture
到网址:https://graph.facebook.com/me
没有回邮件。
到网址:https://graph.facebook.com/v2.9/me
确实回复了电子邮件。
希望这会有所帮助。
【讨论】:
我指定了版本,所以这似乎不是问题 我也更新到最新版本,但仍然无法返回电子邮件:/以上是关于Facebook Graph API 不返回电子邮件的主要内容,如果未能解决你的问题,请参考以下文章