简体   繁体   中英

Facebook API: checking if user is logged in on connect

I have been trying to get my website to check if the user is logged in on page load but I have not been able to get it to work despite following API instructions, here's an example:

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

The alert is never even hit unless the user is logged in, if he is logged out, this alert or anything that would be inside that code block never triggers.

In your example above remove the trailing comma (oauth: true,) // that might just be from copy/paste but want to eliminate any gotchas

For debugging, console logging is my preferred method but since you're not even seeing alerts, your situation is a little bit tricky.

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

Alternatively, try using the getLoginStatus instead of the event subscription.

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

Response should give you an object and you can check response.status and its possible values are: connected, not_authorized or unknown response.authResponse will include properties like: accessToken, expiresIn, etc.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM