Facebook API:检查用户在连接时是否已登录

3

我一直在尝试让我的网站在页面加载时检查用户是否已登录,但是尽管我按照API说明进行操作,但仍无法使其正常工作,以下是一个例子:

<!DOCTYPE html>
    <html>
        <head>
             <title>My Facebook Login Page</title>
        </head>
        <body>
            <div id="fb-root"></div>
            <script>
                alert('hello');
                window.fbAsyncInit = function() {
                    FB.init({
                        appId  : 'APP_ID',
                        status : true, 
                        cookie : true,
                        xfbml  : true,
                        oauth  : true
                    });

                    FB.getLoginStatus(function( response ) {
                       console.log(response);
                       alert('hello2');  
                    });

                    FB.Event.subscribe('auth.statusChange', function(response) {
                       alert('hello2');
                    });

                    FB.Event.unsubscribe('auth.statusChange');
               };
               (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>
       </body>
    </html>

只有用户已登录,警报才会被触发,如果用户已注销,则此代码块内的任何内容都不会触发警报。

1个回答

0

在您上面的示例中,请删除尾随逗号(oauth:true,)//这可能只是从复制/粘贴中获取,但希望消除任何陷阱

对于调试,控制台日志记录是我首选的方法,但由于您甚至没有看到警报,所以您的情况有点棘手。

FB.Event.subscribe("auth.statusChange", function(response) {
  console.log(response);
});

FB.Event.unsubscribe("auth.statusChange");
// If you were to get subscribe to work, think about unsubscribing at some point to, since most likely that's only for an initial check

或者,尝试使用getLoginStatus而不是事件订阅。

FB.getLoginStatus(function( response ) {
    console.log(response);  
});

响应应该给你一个对象,你可以检查response.status和它可能的值是:connected、not_authorized或unknown。response.authResponse将包括属性,如:accessToken、expiresIn等。


有时auth.statusChange事件不会触发,我认为这可能是由于网络延迟或服务器超时。我发现与FB合作需要灵活处理页面加载并非始终“正常”运行的情况。刷新可能会正确地触发事件。 - Sam Tsai
好的,我刚刚意识到它只有在用户登录了Facebook(已授权或未经授权应用程序)的情况下才能正常工作。有没有办法检查用户已注销或注销状态?我觉得getLoginStatus应该检查用户是否已注销,但它并没有,只有当他们授权了应用程序时才会进行检查。 我采纳了您的建议,使用了getLoginStatus,但似乎仍然不起作用。 - Ven
哦,你的回应应该返回一个像这样的对象:{authResponse: null, status: "unknown"} - Sam Tsai
嘿@Ven,你能发布你的整个测试页面吗?我很好奇FB.init是否还有其他问题,可能因某种原因而失败。控制台中是否有任何错误? - Sam Tsai
我已更新我的帖子,除了我的appID外,还提供了完整的代码。控制台中没有错误。 - Ven
发现这是沙盒模式的一个错误,应该尝试在StackOverflow中搜索不同的关键字。这是答案链接:https://dev59.com/tWw05IYBdhLWcg3weBhF - Ven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接