2011-12-30 148 views
0

我似乎無法獲取有關我的網站的登錄用戶的任何信息,例如我的示例中的警報只是說「未定義」而不是名稱。我不知道我做錯了什麼,因爲我正在按照示例代碼來寫信。從Facebook上檢索經過身份驗證的用戶信息

這是來自頁面的<body>

<div id="fb-root"></div> 
     <script> 
      window.fbAsyncInit = function() { 
       FB.init({ 
        appId  : 'blahblah', 
        status  : true, 
        cookie  : true, 
        xfbml  : true, 
        oauth  : true 
       }); 

       FB.api('/me', function(response) { 
        alert(response.name); 
       }); 
      }; 
      (function(d){ 
       var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;} 
       js = d.createElement('script'); js.id = id; js.async = true; 
       js.src = "//connect.facebook.net/en_US/all.js"; 
       d.getElementsByTagName('head')[0].appendChild(js); 
      }(document)); 
     </script> 
     <div class="fb-login-button" data-show-faces="true" data-width="200" data-max-rows="1"></div> 

我可以登錄,但警報永遠不會說我的名字。

回答

0

在你的代碼的運行,你會想先檢查FB.getLoginStatus

參見:https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

那麼你的代碼可能看起來像這樣:

FB.getLoginStatus(function(response) { 
    if (response.status === 'connected') { 
     var uid = response.authResponse.userID; 
     var accessToken = response.authResponse.accessToken; 

     FB.api('/me', function(response) { 
      alert(response.name); 
     }); 
    } else { 
     FB.login(see documentation for FB.login); 
    } 
}); 
0

FB.api調用發生在FB.init調用之後。它與登錄按鈕沒有任何關係,所以它在登錄之前被調用。如果你希望在點擊時發生這種情況,你需要修改代碼,以便它不會嘗試執行,直到你已經完成登錄

試着改變你的代碼如下:。

FB.Event.subscribe('auth.login', function(response) { 
    FB.api('/me', function(response) { 
     alert(response.name); 
    }); 
}); 
相關問題