2011-04-18 40 views
31

我使用的Facebook的Javascript SDK从FB取得OAuth凭证和检索的所有数据用户电子邮件地址:Facebook的OAuth的检索

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

    }); 

我检索所有基本信息(姓名,工作单位,学校,ID ..)但不是EMAIL(response.email == undefined)!!

我知道可以在基本信息(不要求'email'权限)内访问电子邮件,我该怎么做?

回答

60

你需要获取电子邮件明确如下:

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

而获得的电子邮件地址,则需要电子邮件的权限。因此,代码可能看起来像(还有其他选项,如注册按钮,登录按钮..)

  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

这是不可能的,用户必须授予您的应用程序访问他的电子邮件信息,或者在其他情况下,如果用户允许他的电子邮件在每个人的隐私设置中被查看,那么它是可访问的。

+0

我有同样的情况。我不能用fb oauth登录,当需要电子邮件时,用我的帐户登录,因为我不允许我的电子邮件公开显示 – 2014-11-14 21:20:56

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'}); 
    }); 
} 

如果该字段ID不需要改变的变量网址为:

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 + "!"); 
     }); 
    } 
});