Facebook为电子邮件和生日返回undefined

时间:2014-03-08 07:07:19

标签: jquery email facebook-graph-api scope facebook-access-token

我正在尝试使用提供first_namelast_namegenderemailbirthday的Facebook API来注册我的网站。我使用了Graph API并生成了具有必要范围的访问令牌。 我尝试在我创建应用程序的个人帐户中正确返回字段,但对于FB测试用户和朋友的帐户,它返回电子邮件和生日为“未定义”。在graph.facebook.com中,它显示了朋友帐户的以下错误。

enter image description here

Facebook在doulingo上为我朋友的同一帐户返回电子邮件ID。

我是否错误地设置了权限,还是有任何其他问题?

4 个答案:

答案 0 :(得分:9)

我的代码出现问题是因为没有使用access_token。 我使用access_token检索所有,first_namelast_namegenderbirthdayemail

function authUser() {
            FB.login(checkLoginStatus, {scope:'email, user_likes'});
            function checkLoginStatus(response) {
                if(!response || response.status !== 'connected') {
                    alert('User is not authorized');
                    document.getElementById('loginButton').style.display = 'block';
                } else {
                    alert('User is authorized');
                    document.getElementById('loginButton').style.display = 'none';
                    console.log('Access Token: ' + response.authResponse.accessToken);

                    //This has to be in your callback!
                    var uid = response.authResponse.userID;
                    var accessToken = response.authResponse.accessToken;
                // access token is very important to get some fields like email, birthday

                    getData();
                }
            }
        }


    function getData() {
        console.log('Welcome!  Fetching your information.... ');
        FB.api('/me', function(response) {
            console.log('Good to see you, ' + response.name + '.' + response.id);
        });
    };

答案 1 :(得分:1)

检查我的回答here,看看这是一个众所周知的问题,但不是Facebook开发人员的错误。

编辑..这就是他们在facebook开发者网站上所说的话:

  

“...'用户'对象的'email'字段的文档(   https://developers.facebook.com/docs/reference/api/user/)澄清   这里的预期行为,是:“这个领域不会   如果没有有效的电子邮件地址,则返回“。

     

有很多   您可能认为用户应该收到电子邮件的情况   地址已退回,但他们不会。出于隐私和安全原因   不可能详细说明任何具体的确切原因   用户的电子邮件地址不会被退回,所以请不要问。一些   可能的原因:

     

帐户没有电子邮件地址;没有确认邮件   帐户地址;没有经过验证的电子邮件地址;用户输入了   安全检查点,要求他们重新确认他们的电子邮件   地址,他们还没有这样做;用户的电子邮件地址是   不可到达的。

     

您还需要“电子邮件”扩展权限,即使是   拥有有效,已确认,可访问的电子邮件地址的用户......“

答案 2 :(得分:0)

单击“获取访问令牌”按钮,然后选择所需的权限。 它将重新生成访问令牌和电子邮件,其他值将变为可用。

注意:

  • 要访问当前用户的生日,您需要“user_birthday”权限
  • 要访问朋友的生日,您需要“friends_birthday”权限
  • 您无法不惜任何代价访问朋友的电子邮件。
  • 在帐户设置中,用户需要将其电子邮件设置为“主要”才能被访问,否则将返回null。

有关详细信息,请参阅thisthis个主题。

答案 3 :(得分:0)

//----------
//All you need do is add the fields you want as query strings as follows:
//----------


FB.api('/me?fields=first_name,email,last_name,name', function(response) {
  console.log('Good to see you, ' + response.name + '.' + response.first_name);
});

//----------

//I hope that helps!!