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


can't get email address from Facebook SDK v5 for PHP

我想从Facebook使用他们的PHP SDK V5登录后获得用户的电子邮件地址,但遇到的问题,我不太理解。

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

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

login。

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>';

Login-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
}

graphObject -> getProperty(电子邮件);不返回任何东西

我的问题也是一样。我的网站识别登录,我只收到名字和id。

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

$fb->get('/me?fields=email');

这解决了我的问题!

你也可以在你的php文件中使用Facebook自己的Login Button(通过他们的工具插件生成器生成),这会更吸引人,但记住要注意这个HTML5属性data-scope。检查这个例子:

<div class="fb-login-button" data-max-rows="1" 
   data-size="large" data-button-type="login_with" data-show-faces="false"
   data-scope="email" data-auto-logout-link="false" 
   data-use-continue-as="false">
</div>

我认为你应该使用Facebook Graph API方法获取用户帐户信息。获得成功的访问令牌后,使用api图方法。像这样:

$userProfile = $facebook->api('/me?fields=id,first_name,last_name,email,gender,locale,picture');
$userClass = new User;
$userData = $userClass->checkFBUserData($userProfile);

那么您可以打印电子邮件地址如下:echo $userData['email'];

更多细节请查看本教程

这是工作源,我已经测试过了