2016-12-04 32 views
-1

我正在我的網站上集成FB登錄,爲此我需要用戶的電子郵件。這裏是代碼的一部分PHP - 圖表API 2.8不請求電子郵件

$fb = new Facebook\Facebook([ 
    'app_id' => 'app-id', 
    'app_secret' => 'secret', 
    'default_graph_version' => 'v2.8', 
]); 

$helper = $fb->getJavaScriptHelper(); 

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

if (isset($accessToken)) { 
    $fb->setDefaultAccessToken($accessToken); 

    try { 
    $requestProfile = $fb->get("/me?fields=name,email"); 
    $profile = $requestProfile->getGraphNode()->asArray(); 
    } catch(Facebook\Exceptions\FacebookResponseException $e) { 
    // When Graph returns an error 
    echo 'Graph returned an error: ' . $e->getMessage(); 
    } catch(Facebook\Exceptions\FacebookSDKException $e) { 
    // When validation fails or other local issues 
    echo 'Facebook SDK returned an error: ' . $e->getMessage(); 
    } 

    print_r($profile); 
} 

我回來的是名稱和ID。即使是要求用戶授予應用程序權限的彈出窗口也不會詢問電子郵件。可以理解的是,它不會返回它。

我見過this和許多其他問題,但沒有解決方案爲我工作。我究竟做錯了什麼?

+0

_「即使是彈出窗口,要求用戶授予權限的應用程序不會要求電子郵件」_ - 這意味着_you_沒有要求您的代碼在您觸發登錄部分的權限。 – CBroe

+0

啊..你可能會做些什麼。讓我調查javascript – VeeK

回答

0

您需要獲得獲取用戶電子郵件的權限。

請檢查https://developers.facebook.com/docs/php/howto/example_facebook_login看看如何提出要求(如:權限= [ '郵件', 'user_likes', 'USER_LOCATION', 'user_friends', 'user_birthday', 'user_hometown'];)

參考更多示例請參閱https://developers.facebook.com/docs/facebook-login/permissions以獲得許可參考,https://github.com/thephpleague/oauth2-facebook

+0

請參閱https://github.com/thephpleague/oauth2-facebook以獲取非常好的匹配... –

+0

我的代碼與示例有點不同。我沒有使用相同的幫手。 '$ fb-> get(「/ me?fields = name,email」)''我沒有遇到什麼錯誤,因爲它正在請求電子郵件但不工作 – VeeK

0

感謝CBroe在上面的評論中指出了這一點,權限應該設置在JavaScript中,而不是PHP。這是因爲PHP代碼在授權完成時運行,並且您已收到所有您應該訪問的信息。

要解決它,我改變

FB.login(function(response){ 
     // take action based on response 
}); 

FB.login(function(response){ 
     // take action based on response 
}, {scope: 'public_profile, email'}); 

而且現在的工作。謝謝

相關問題