Facebook电子邮件字段返回null(即使设置并接受了“电子邮件”权限)第2部分

时间:2014-07-31 22:13:38

标签: facebook facebook-graph-api

这里是a link描述我最初问题的主题。

简而言之:问题是在某些情况下,facebook-graph-api不会返回用户的电子邮件地址。

其他stackoverflow伙伴建议使用他的Facebook电子邮件,如果他有一个用户名(即userName@facebook.com),我已经完成。但是,如果Facebook用户没有"用户名"该怎么办?那里也是。

你会推荐什么?要在他询问他的电子邮件地址的页面上重定向他?

2 个答案:

答案 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,以及您可以处理此类假电子邮件的域的子域。