Facebook oauth检索用户电子邮件

时间:2011-04-18 18:27:45

标签: 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 ..)但不是EMAIL(response.email == undefined)!!

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

4 个答案:

答案 0 :(得分:65)

您需要明确地发送电子邮件,如下所示:

                    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 */

答案 1 :(得分:5)

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

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 更改为:

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

答案 2 :(得分:1)

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

docker-machine ip default

答案 3 :(得分:-3)

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