【问题标题】:Facebook returns undefined for email and birthdayFacebook 返回未定义的电子邮件和生日
【发布时间】:2014-04-11 13:21:42
【问题描述】:

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

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

是我设置的权限不正确还是有其他问题?

【问题讨论】:

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


    【解决方案1】:

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

    注意:

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

    有关详细信息,请参阅 thisthis 线程。

    【讨论】:

    • 感谢您的回答,它帮助我理解了某些事情,例如您的最后一点“主要”电子邮件。但我做错的只是没有在代码中使用 access_token。我用了它,问题就解决了。看看我的回答:)
    【解决方案2】:

    我的代码的问题都是因为没有使用 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);
            });
        };
    

    【讨论】:

    • 所以你获取了访问令牌但是你用它做了什么?
    【解决方案3】:

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

    正在编辑。这是他们在 facebook 开发者网站上所说的:

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

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

    帐户上没有电子邮件地址;没有确认的电子邮件 帐户地址;帐户上没有经过验证的电子邮件地址;用户输入了一个 要求他们重新确认电子邮件的安全检查点 地址,但他们还没有这样做;用户的电子邮件地址是 无法访问。

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

    【讨论】:

    • 嗨 Hugo,复制和粘贴答案的关键部分并提供链接可能是个好主意,这样用户无需转到其他页面即可快速获得解决方案。
    【解决方案4】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-29
      • 1970-01-01
      • 2016-11-12
      相关资源
      最近更新 更多