这里是a link描述我最初问题的主题。
简而言之:问题是在某些情况下,facebook-graph-api不会返回用户的电子邮件地址。
其他stackoverflow伙伴建议使用他的Facebook电子邮件,如果他有一个用户名(即userName@facebook.com),我已经完成。但是,如果Facebook用户没有"用户名"该怎么办?那里也是。
你会推荐什么?要在他询问他的电子邮件地址的页面上重定向他?
答案 0 :(得分:3)
如果你使用的是PHP Sdk,那么这一部分很重要:
// $facebook->api('/me?fields=id,email,first_name,last_name,gender,birthday');
$facebook = new Facebook\Facebook([
'app_id' => '{app-id}',
'app_secret' => '{app-secret}'
]);
$accessToken = !empty($_GET['accessToken'])?$_GET['accessToken']:'';
$facebook->setAccessToken($accessToken);
$user = $facebook->getUser();
if ($user) {
try {
// Proceed knowing you have a logged in user who's authenticated.
$user_profile = $facebook->api('/me?fields=id,email,first_name,last_name,gender,birthday');
// your register function here
// userSignup($user_profile);
} catch (FacebookApiException $e) {
//echo '<pre>'.htmlspecialchars(print_r($e, true)).'</pre>';
$user = null;
}
}
答案 1 :(得分:2)
Facebook API没有返回电子邮件地址的原因有多种。 https://developers.facebook.com/bugs/298946933534016
中列出了一些原因提出了不同的解决方案来处理这种情况,就像在https://github.com/mkdynamic/omniauth-facebook/issues/61
的讨论一样但我认为使用userName@facebook.com
不是一个好的解决方案,因为它不是有效的电子邮件,并且userName
可能也不可用,并且当您尝试发送电子邮件时用户,它将无法提供等等。
询问用户的电子邮件地址也不是一件好事,因为有些用户可能会拒绝提供他们的电子邮件。
我建议构建像uid@facebook.yourdomain.com
这样的假邮件,其中uid
是保证始终从Facebook返回的用户ID,以及您可以处理此类假电子邮件的域的子域。