无法从Facebook SDK v5 for PHP获取电子邮件地址

Htm*_*sin 2 php facebook facebook-graph-api

我希望在使用他们的PHP SDK V5从Facebook登录后获取用户的电子邮件地址,但遇到了我不太了解的问题.

根据他们的分步指南https://developers.facebook.com/docs/reference/php/5.0.0

我创建了Login.php和Login-callback.php文件

的login.php

session_start() ;
require_once __DIR__ . '/src/Facebook/autoload.php';

$fb = new Facebook\Facebook([
  'app_id' => $app_id,
  'app_secret' => $app_secret,
  'default_graph_version' => 'v2.2',
]);

$helper = $fb->getRedirectLoginHelper();
$permissions = ['email', 'public_profile']; // optional
$loginUrl = $helper->getLoginUrl('http://www.example.com/login-callback.php', $permissions);


echo '<a href="' . $loginUrl . '">Log in with Facebook!</a>';
Run Code Online (Sandbox Code Playgroud)

登录-callback.php

session_start() ;
require_once __DIR__ . '/src/Facebook/autoload.php';

# login-callback.php
$fb = new Facebook\Facebook([
  'app_id' => $app_id,
  'app_secret' => $app_secret,
  'default_graph_version' => 'v2.2',
]);

$helper = $fb->getRedirectLoginHelper();
try {
  $accessToken = $helper->getAccessToken();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

if (isset($accessToken)) {
  // Logged in!
  $_SESSION['facebook_access_token'] = (string) $accessToken;

  // OAuth 2.0 client handler
$oAuth2Client = $fb->getOAuth2Client();

// Exchanges a short-lived access token for a long-lived one
$longLivedAccessToken = $oAuth2Client->getLongLivedAccessToken($_SESSION['facebook_access_token']);


// Sets the default fallback access token so we don't have to pass it to each request
$fb->setDefaultAccessToken($longLivedAccessToken);

try {
  $response = $fb->get('/me');
  $userNode = $response->getGraphUser();
} catch(Facebook\Exceptions\FacebookResponseException $e) {
  // When Graph returns an error
  echo 'Graph returned an error: ' . $e->getMessage();
  exit;
} catch(Facebook\Exceptions\FacebookSDKException $e) {
  // When validation fails or other local issues
  echo 'Facebook SDK returned an error: ' . $e->getMessage();
  exit;
}

echo 'Logged in as ' . $userNode->getName();

$graphObject = $response->getGraphObject();
$email = $graphObject->getProperty('email');  // This is not getting any thing

echo $email; // Empty

}
Run Code Online (Sandbox Code Playgroud)

graphObject-> getProperty('email'); 没有回来任何东西

小智 7

我的问题是一样的.我的网站认可登录,我只收到姓名和身份证.

我在这里看到了这个提示:

$fb->get('/me?fields=email');
Run Code Online (Sandbox Code Playgroud)

这解决了我的问题!

  • 正如@Norbert所写的那样,显然已经[记录](https://developers.facebook.com/docs/facebook-login/permissions#reference-email):_注意,即使你要求'email`许可,也不能保证你会得到一个电子邮件地址.例如,如果有人使用电话号码而不是电子邮件地址注册Facebook,则电子邮件字段可能为空._ (2认同)