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

Facebook API: checking if user is logged in on connect

本文关键字:连接 登录 是否 用户 API 检查 Facebook      更新时间:2023-09-26

我一直在尝试让我的网站检查用户是否在页面加载时登录,但尽管遵循 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>

除非用户登录,否则警报甚至永远不会命中,如果他已注销,则此警报或该代码块中的任何内容都不会触发。

在上面的示例中,删除尾随逗号(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,其可能的值是:连接、not_authorized或未知 response.authResponse将包括以下属性:accessToken,expiresIn等。