Facebook oauth检索用户电子邮件

Facebook oauth检索用户电子邮件,facebook,facebook-graph-api,Facebook,Facebook Graph Api,我正在使用Facebook Javascript SDK获取oauth令牌并从FB检索所有数据: function login() { FB.api('/me', function (response) { alert('You have successfully logged in, ' + response.name + ", " + response.email + "!"); }); 我检索所有基本信息(全名、工作、学校、ID

我正在使用Facebook Javascript SDK获取oauth令牌并从FB检索所有数据:

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

    });
我检索所有基本信息(全名、工作、学校、ID…),但不检索电子邮件(response.EMAIL==未定义)


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

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

您需要按如下方式明确获取电子邮件:

                    var url = '/me?fields=name,email';
                    FB.api(url, function (response) {
                        alert(response.name);
                        alert(response.email);
                    });
要获得电子邮件地址,需要电子邮件许可。因此,代码可能如下所示(还有其他选项,如注册按钮、登录按钮……)

首先让你的应用程序上线,向公众开放。然后您必须授予获取用户“电子邮件”的权限,这是应用程序默认不允许的。之后,登录方法应更改如下

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,则将变量url更改为:


如果您可以更改为使用承诺链接,这对我很有用:

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

我也有同样的情况。当需要电子邮件时,我无法使用我的帐户使用fb oauth登录,因为我不允许我的电子邮件公开访问。在哪里授予获取用户电子邮件的权限?转到facebook开发者控制台。在应用程序审阅下的控制台上,显示默认情况下已批准电子邮件。然而,我仍然没有得到一个Facebook应用程序的电子邮件地址,而另一个还可以。我找不到电子邮件的任何特殊设置。
var url = '/me?fields=name,email';
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 + "!");
       });
    }
});