从Facebook检索已验证的用户信息

Retrieve authenticated user's info from Facebook

本文关键字:用户 信息 验证 Facebook 检索      更新时间:2023-09-26

我似乎无法获得关于我的网站登录用户的任何信息,例如,在我的例子中的警报只是说"未定义"而不是名称。我不知道我做错了什么,因为我一直在遵循示例代码。

这是来自页面的<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>

我可以登录,但是警告没有显示我的名字

在运行代码时,您需要首先检查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 );
    }
 });

FB。api调用发生在FB之后。init调用。它没有以任何方式绑定到登录按钮所以它在你登录之前被调用。如果你想在点击时执行,你需要修改代码,让它在你登录后才尝试执行。

试着这样修改你的代码:

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