[英]can't get email address from Facebook SDK v5 for PHP
我希望在使用他們的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>';
登錄-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'); 沒有回來任何東西
我的問題是一樣的。 我的網站認可登錄,我只收到姓名和身份證。
我在這里看到了這個提示:
$fb->get('/me?fields=email');
這解決了我的問題!
你也可以在你的php文件中使用Facebook自己的登錄按鈕 (通過他們的工具插件生成器生成),這將更具吸引力,但請記住要處理這個HTML5屬性數據范圍 。 檢查此示例:
<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 graph方法。 像那樣:
$userProfile = $facebook->api('/me?fields=id,first_name,last_name,email,gender,locale,picture');
$userClass = new User;
$userData = $userClass->checkFBUserData($userProfile);
你可以打印這樣的電子郵件地址: echo $userData['email'];
有關更多詳細信息,請查看本教程
這是工作源,我已經測試過了
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.