2011-10-19 102 views
29

我正在使用JavaScript API爲Facebook創建我的應用程序。問題是,它返回
email = undefined如何使用javascript sdk獲取Facebook用戶的電子郵件ID

我不知道爲什麼?如果我在我的應用程序上使用Facebook登錄/註銷按鈕,則該警報會顯示用戶的正確電子郵件ID,但我不想那樣做。 我錯過了什麼?

這裏是我的代碼:

<p><fb:login-button autologoutlink="true" perms="user_about_me,email"></fb:login-button></p> 

<script> 
window.fbAsyncInit = function() { 
    FB.init({ appId: '250180631699888', status: true, cookie: true, 
    xfbml: true 
}); 

    FB.getLoginStatus(function (response) { 
    if (response.session) { 
     greet(); 
    } 
    }); 
}; 
(function() { 
    var e = document.createElement('script'); 
    e.type = 'text/javascript'; 
    e.src = document.location.protocol + 
    '//connect.facebook.net/en_US/all.js'; 
    e.async = true; 
    document.getElementById('fb-root').appendChild(e); 
}()); 

function greet() { 
    FB.api('/me', function (response) { 
    alert('Welcome, ' + response.name + "!"); 
    alert('Your email id is : '+ response.email); 
}); 
} 
</script> 

回答

8

據Facebook頁面,你應該使用,而不是燙髮「範圍」的最新信息。 https://developers.facebook.com/docs/reference/javascript/FB.login/

如果您訪問

https://developers.facebook.com/tools/console/

,並使用FB-API - >用戶信息例如爲起點,然後註銷並重新,它應該問你的電子郵件燙髮和你可以看到你的電子郵件正在打印。正如你在文章中提到的那樣,它使用response.email完成。

+0

感謝您的回覆,我還有一個查詢,如何獲取用戶登錄的電子郵件ID?還有其他電子郵件ID與一個配置文件相關... – user958414

+0

您必須使用您的應用訪問令牌而不是用戶,然後使用它來檢索所需的信息 – TommyBs

0

您的解決方案有幾個錯誤。首先你使用的是舊認證方案。你應該使用這裏描述的新的: https://developers.facebook.com/docs/reference/javascript/

你需要添加oauth:true到你的init函數,並確保你的getLoginStatus尋找新的響應類型。

當這說明你需要確保你有權限查看用戶的電子郵件。您可以在此處看到所需的權限: http://developers.facebook.com/docs/reference/api/user/

您可以通過使用FB.login函數獲得這些信息,如TommyBs在另一個答案中所述。

一旦你有了這些選項,你可以使用FB.api函數來獲取電子郵件。

12

我這裏是我如何檢索用戶名和電子郵件:

<div id="fb-root"></div> 
<script src="http://connect.facebook.net/en_US/all.js"></script> 

<script> 
    $(function() { 
    FB.init({ 
     appId : 'APP_ID', 
     status : true, // check login status 
     cookie : true, // enable cookies to allow the server to access the session 
     xfbml : true // parse XFBML 
    }); 

    FB.getLoginStatus(function(response) { 
     if (response.status == 'connected') { 
     getCurrentUserInfo(response) 
     } else { 
     FB.login(function(response) { 
      if (response.authResponse){ 
      getCurrentUserInfo(response) 
      } else { 
      console.log('Auth cancelled.') 
      } 
     }, { scope: 'email' }); 
     } 
    }); 

    function getCurrentUserInfo() { 
     FB.api('/me', function(userInfo) { 
     console.log(userInfo.name + ': ' + userInfo.email); 
     }); 
    } 
    }); 
</script> 
6
<button id="fb-login">Login & Permissions</button> 

<script> 
document.getElementById('fb-login').onclick = function() { 
    var cb = function(response) { 
    Log.info('FB.login callback', response); 
    if (response.status === 'connected') { 
     Log.info('User logged in'); 
    } else { 
     Log.info('User is logged out'); 
    } 
    }; 
    FB.login(cb, { scope: 'email' }); 
}; 
</script> 

使用此額外的許可

更多詳情請訪問: https://www.fbrell.com/examples/

+0

*,{scope:'email'} *,挽救了生命。試過很多...只有這個解決方案爲我工作。 – Vikrant

82
// https://developers.facebook.com/docs/javascript/reference/FB.api/ 
// v2.4 

FB.api('/me', { locale: 'en_US', fields: 'name, email' }, 
    function(response) { 
    console.log(response.email); 
    } 
); 
+0

這就是幫助我的東西 – Benjamin

+0

爲什麼FB的傢伙不停地亂動....?!?!?! Tx @masakielastic!已經有好幾個小時了,直到我找到你的答案! –

0

在這段代碼中,我已經獲取用戶數據表單facebook並將其存儲到我的數據庫中g ajax

FB.login(function(response) { 
      if (response.authResponse) { 
     FB.api('/me?fields=email,name,first_name,last_name', function(response) 
     { 
      FB.api(
      "/"+response.id+"/picture?height=100", 
            function (responses) { 
             //console.log(responses.data.url) 
                response['profile_pic']=responses.data.url; 
             $.ajax({ 
                type:"POST", 
                url:'<?php echo base_url(); ?>'+'home/facebook_get_signup', 
                data:response, 
                success:function(res) 
                { 
                 if(res=='success') 
                 { 

                  window.location='<?php echo base_url(); ?>'; 
                 } 
                 if(res=='exists') 
                 { 
                  window.location='<?php echo base_url(); ?>'; 
                 } 
                } 
               }); 

            } 
           ) 
     }); 
     } else { 
     console.log('User cancelled login or did not fully authorize.'); 
     } 
     // handle the response 
     }, {scope: 'email,user_likes'}); 
相關問題