2015-09-07 57 views
5

我嘗試使用FB登錄在我的網站上,需要獲取用戶信息(電子郵件,public_profile,出生日期和位置)。但在登錄後,我只有用戶名和facebookId。代碼:電子郵件範圍不工作,這是用於FB登錄

<img src="" alt="" onclick="fblogin();"/> 

JavaScript部分:

function statusChangeCallback(response) { 
     console.log('statusChangeCallback'); 
     console.log(response); 
     // The response object is returned with a status field that lets the 
     // app know the current login status of the person. 
     // Full docs on the response object can be found in the documentation 
     // for FB.getLoginStatus(). 
     if (response.status === 'connected') { 
      // Logged into your app and Facebook. 
      testAPI(); 
     } else if (response.status === 'not_authorized') { 
      // The person is logged into Facebook, but not your app. 
      document.getElementById('status').innerHTML = 'Please log ' + 
       'into this app.'; 
     } else { 
      // The person is not logged into Facebook, so we're not sure if 
      // they are logged into this app or not. 
      document.getElementById('status').innerHTML = 'Please log ' + 
       'into Facebook.'; 
     } 
    } 

    // This is called with the results from from FB.getLoginStatus(). 
    function checkLoginState() { 
     FB.getLoginStatus(function (response) { 
      statusChangeCallback(response); 
     }); 
    } 



    function fblogin() 
    { 
     checkLoginState(); 
     FB.login(function (response) { 
      if (response.authResponse) { 
       console.log('Bilgiler Alınıyor'); 
       FB.api('/me', function (response) { 

        console.log(JSON.stringify(response)); 
       }); 
      } else { 
       console.log('User cancelled login or did not fully authorize.'); 
      } 
     }, { scope: 'user_about_me,email,public_profile' }); 
    } 


    window.fbAsyncInit = function() { 
     FB.init({ 
      appId: '{app-id}', 
      xfbml: true, 
      version: 'v2.4' 
     }); 

     FB.getLoginStatus(function (response) { 
      if (response.status === 'connected') { 
       console.log(response.authResponse.accessToken); 
      } 
     }); 
    }; 

    (function (d, s, id) { 
     var js, fjs = d.getElementsByTagName(s)[0]; 
     if (d.getElementById(id)) { return; } 
     js = d.createElement(s); js.id = id; 
     js.src = "//connect.facebook.net/en_US/sdk.js"; 
     fjs.parentNode.insertBefore(js, fjs); 
    }(document, 'script', 'facebook-jssdk')); 

JSON結果:

{"name":"Name Surname","id":"xxxxxxxxxxxxxxxxx"} 

沒有電子郵件或任何其它信息。

回答

14

這是一個衆所周知的問題,在更改日誌中搜索「聲明字段」:https://developers.facebook.com/docs/apps/changelog#v2_4

例如:

FB.api('/me?fields=id,name,email', ... 

我相信你也能做到這樣的:

FB.api('/me', {fields: 'id,name,email'}, ... 

順便說一句,確保你知道異步JavaScript是如何工作的,你在FB.login之前調用checkLoginState(),但是FB.getLoginStatus不會返回一些im中介,你總是調用FB.login。這裏有一篇關於如何以正確的方式使用FB.login和FB.getLoginStatus的文章:http://www.devils-heaven.com/facebook-javascript-sdk-login/

+1

謝謝,它的工作.. – OwnurD

+0

謝謝,仍然工作2016年10月 – Tom

+0

謝謝! Facebook擁有數百萬用戶,但他們的開發人員無法解決原始問題!我討厭Facebook。 – Webars