从Facebook检索经过身份验证的用户信息

时间:2011-12-30 22:48:05

标签: javascript facebook facebook-graph-api

我似乎无法获取有关我网站登录用户的任何信息,例如我的示例中的警报只是说“未定义”而不是名称。我不知道我做错了什么,因为我正在按照示例代码写信。

这是来自页面的<body>

<div id="fb-root"></div>
        <script>
            window.fbAsyncInit = function() {
                FB.init({
                    appId      : 'blahblah',
                    status     : true, 
                    cookie     : true,
                    xfbml      : true,
                    oauth      : true
                });

                FB.api('/me', function(response) {
                    alert(response.name);
                });
            };
            (function(d){
                var js, id = 'facebook-jssdk'; if (d.getElementById(id)) {return;}
                js = d.createElement('script'); js.id = id; js.async = true;
                js.src = "//connect.facebook.net/en_US/all.js";
                d.getElementsByTagName('head')[0].appendChild(js);
            }(document));
        </script>
        <div class="fb-login-button" data-show-faces="true" data-width="200" data-max-rows="1"></div>

我可以登录,但警报从不说出我的名字。

2 个答案:

答案 0 :(得分:0)

在FB.init调用之后发生FB.api调用。它不以任何方式与登录按钮绑定,因此它在您登录之前被调用。如果您希望在单击时发生这种情况,则需要修改代码,以便在您执行之后不会尝试执行登录。

尝试将代码更改为:

FB.Event.subscribe('auth.login', function(response) {
   FB.api('/me', function(response) {
      alert(response.name);
   });
});

答案 1 :(得分:0)

在运行代码时,您需要先检查FB.getLoginStatus

请参阅:https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/

然后您的代码可能类似于:

FB.getLoginStatus(function(response) {
    if (response.status === 'connected') {
        var uid = response.authResponse.userID;
        var accessToken = response.authResponse.accessToken;

         FB.api('/me', function(response) {
            alert(response.name);
         });
    } else {
        FB.login( see documentation for FB.login );
    }
 });