2012-09-07 32 views
0

我使用Facebook的JS SDK每設在那裏做例如客戶端驗證here的Facebook客戶端驗證示例 - 將範圍

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Facebook Client-side Authentication Example</title> 
    </head> 
    <body> 
    <div id="fb-root"></div> 
    <script> 
     // Load the SDK Asynchronously 
     (function(d){ 
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0]; 
     if (d.getElementById(id)) {return;} 
     js = d.createElement('script'); js.id = id; js.async = true; 
     js.src = "//connect.facebook.net/en_US/all.js"; 
     ref.parentNode.insertBefore(js, ref); 
     }(document)); 

     // Init the SDK upon load 
     window.fbAsyncInit = function() { 
     FB.init({ 
      appId  : 'YOUR_APP_ID', // App ID 
      channelUrl : '//'+window.location.hostname+'/channel', // Path to your Channel File 
      status  : true, // check login status 
      cookie  : true, // enable cookies to allow the server to access the session 
      xfbml  : true // parse XFBML 
     }); 

     // listen for and handle auth.statusChange events 
     FB.Event.subscribe('auth.statusChange', function(response) { 
      if (response.authResponse) { 
      // user has auth'd your app and is logged into Facebook 
      FB.api('/me', function(me){ 
       if (me.name) { 
       document.getElementById('auth-displayname').innerHTML = me.name; 
       } 
      }) 
      document.getElementById('auth-loggedout').style.display = 'none'; 
      document.getElementById('auth-loggedin').style.display = 'block'; 
      } else { 
      // user has not auth'd your app, or is not logged into Facebook 
      document.getElementById('auth-loggedout').style.display = 'block'; 
      document.getElementById('auth-loggedin').style.display = 'none'; 
      } 
     }); 

     // respond to clicks on the login and logout links 
     document.getElementById('auth-loginlink').addEventListener('click', function(){ 
      FB.login(); 
     }); 
     document.getElementById('auth-logoutlink').addEventListener('click', function(){ 
      FB.logout(); 
     }); 
     } 
    </script> 

    <h1>Facebook Client-side Authentication Example</h1> 
     <div id="auth-status"> 
     <div id="auth-loggedout"> 
      <a href="#" id="auth-loginlink">Login</a> 
     </div> 
     <div id="auth-loggedin" style="display:none"> 
      Hi, <span id="auth-displayname"></span> 
     (<a href="#" id="auth-logoutlink">logout</a>) 
     </div> 
    </div> 

    </body> 
</html> 

我一直沒能在弄清楚我瑣碎的問題是如何向此代碼添加scope參數以請求訪問電子郵件地址。任何人都可以將我指向正確的方向嗎?

謝謝!

---編輯---

我已經看到了這個代碼中找到的文檔

FB.login(function(response) { 
    // handle the response 
}, {scope: 'email'}); 

我想我不知道如何將是這個現有的代碼,但因爲它是在無法正常工作

document.getElementById('auth-loginlink').addEventListener('click', function(){ 
       FB.login(); 
      }); 

如果任何人都可以更新上面的行來合併額外的範圍參數,我很想嘗試它。

回答

2

簡單的解決方案。只需將這些參數添加到FB.login()函數。

FB.login(function(){}, {scope: 'email'}); 

如果您不需要處理登錄響應,那麼只需提供一個空函數。

+0

更新了我原來的帖子。我已經看到了這些代碼,但無法成功地加入它。 – dscl

+0

出了什麼問題?你有沒有得到任何錯誤? – Lix

+0

沒有錯誤,點擊登錄鏈接只是沒有做任何事情。由於在初始代碼示例中,FB.login()沒有執行任何響應處理,因此我不認爲使用您提供的代碼示例正確更新了它,因爲除了範圍參數之外,它還採用了響應函數。 – dscl