php - 无法从适用于 PHP 的 Facebook SDK v5 获取电子邮件地址

标签 php facebook facebook-graph-api

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

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

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

登录.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>';

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('email');不返回任何东西

最佳答案

我的问题是一样的。我的网站识别了登录名,我只收到了姓名和 ID。

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

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

这解决了我的问题!

关于php - 无法从适用于 PHP 的 Facebook SDK v5 获取电子邮件地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31412242/

相关文章:

php - Behat:Goutte/Guzzle 通过 cURL "Warning: curl_setopt_array(): 3607 is not a valid File-Handle resource"下载文件

ruby-on-rails-3 - 弃用 offline_access on facebook 与 RoR

php - 如何使用 PHP 和 Xampp 在浏览器中运行系统命令?

php - 从日期间隔的数组列表中返回重叠量

php - 替换文件中的一行而不重写整个文件(在 PHP 中)

php - 使用 FB Graph API 为特定页面创建 Facebook 事件

ios - 无法通过 Facebook 浏览器下载文件

html - Facebook Open graph tags for blogger - OG 图片太小。我可以指定全尺寸图像而不是缩略图吗?

python - Instagram Graph API - 发布图像

Facebook Graph API 仅返回 15 张照片,没有分页选项