2011-04-18 16 views
31

मैं फेसबुक जावास्क्रिप्ट एसडीके का उपयोग कर रहा अमेरिकन प्लान से सभी डेटा OAuth टोकन प्राप्त और पुनः प्राप्त करने के:फेसबुक OAuth पुनः प्राप्त उपयोगकर्ता ईमेल

function login() { 
    FB.api('/me', function (response) {    
     alert('You have successfully logged in, ' + response.name + ", " + response.email + "!"); 

    }); 

मैं सभी बुनियादी जानकारी पुनः प्राप्त (पूरा नाम, काम, स्कूल, आईडी ..) लेकिन EMAIL नहीं (प्रतिक्रिया.मेल == अपरिभाषित) !!

मुझे पता है कि बुनियादी जानकारी के भीतर ईमेल तक पहुंचना संभव है ('ईमेल' अनुमतियों के लिए नहीं पूछना), मैं यह कैसे कर सकता हूं?

उत्तर

60

आप स्पष्ट रूप से इस प्रकार ईमेल प्राप्त की जरूरत है। तो कोड कैसा लग सकता है (वहाँ रजिस्टर बटन, प्रवेश बटन की तरह अन्य विकल्प हैं ..)

  FB.login(function (response) { 
       if (response.session) { 
        var url = '/me?fields=name,email'; 
        FB.api(url, function (response) { 
         alert(response.name); 
         alert(response.email); 
        }); 
       } 
       else { 
        alert("User did not login successfully"); 
       } 
      }, { scope: 'email' }); /* perms changed to scope */ 
-3

यह असंभव है, उपयोगकर्ता अपने ईमेल जानकारी का उपयोग करने के लिए अपने आवेदन देने के लिए है, या अन्य मामले में, यह सुलभ हो सकता है उपयोगकर्ता अपने ईमेल की अनुमति दी है, तो अपनी गोपनीयता सेटिंग्स में हर कोई द्वारा देखी है।

    var url = '/me?fields=name,email'; 
        FB.api(url, function (response) { 
         alert(response.name); 
         alert(response.email); 
        }); 

और ईमेल पता पाने के लिए, ईमेल अनुमति की जरूरत है:

+0

मेरे पास एक ही स्थिति है। मैं एफबी ओथ के साथ लॉगिन नहीं कर सकता, जब ईमेल की आवश्यकता होती है, मेरे खाते के साथ क्योंकि मैं अपने ईमेल को सार्वजनिक रूप से देखने की अनुमति नहीं देता –

3

सबसे पहले अपने अनुप्रयोग लाइव, जनता के लिए उपलब्ध हैं। फिर आपको उपयोगकर्ता 'ईमेल' प्राप्त करने की अनुमति देना होगा जिसे ऐप द्वारा डिफॉल्ट की अनुमति नहीं है। इसके बाद लॉगिन विधि को निम्नानुसार बदला जाना चाहिए।

function checkLoginState() { 
    FB.getLoginStatus(function(response) { 
     statusChangeCallback(response); 
     console.log('Welcome! Fetching your information.... '); 
     var url = '/me?fields=id,name,email'; 
     FB.api(url, function(response) { 
      alert(response.name + " " + response.id + " " +response.email); 
     }, {scope: 'email'}); 
    }); 
} 

क्षेत्र आईडी बदलाव की जरूरत नहीं है, तो चर यूआरएल के रूप में:

var url = '/me?fields=name,email'; 
1

आप एक वादा श्रृंखलन उपयोग करने के लिए बदल सकते हैं, तो यह मेरे लिए काम किया:

fb.login({scope:'email'}).then(function (resp) { 
    if (resp.status === 'connected') { 
     fb.api('/me', 'get', {fields:'id,email,first_name,gender,...'}).then(function (response) { 
      alert('You have successfully logged in, ' + response.name + ", " + response.email + "!"); 
     }); 
    } 
}); 
संबंधित मुद्दे