开发者

FB.getLoginStatus does not fires callback function

开发者 https://www.devze.com 2023-04-07 01:29 出处:网络
I have a difficult problem. Difficult means I searched through the net and StackOverflow as well the whole FBJS SDK documentation and haven\'t find answer.

I have a difficult problem. Difficult means I searched through the net and StackOverflow as well the whole FBJS SDK documentation and haven't find answer.

I am building a Page Tab application where I'd like to let fans to rsvp events. So I have to check if the user is logged in and if it doesn't I have to login. That sounds pretty easy, but FB.getLoginStatus doesn't fires callback function. This is the code excerpt:

FB.init({
   appId: window.appID,
   status: true,
   xfbml: true,
   cookie: true,
   oauth: true,
   channelUrl: 'http://example.com/fb/channel.html'
 }); 

and then I simply - of course after the user clicks on a button - call FB.getLoginStatus, but it seems it doesn't do anything.

I've already checked sandbox mode, FB.init success, URLs in application settings and developing environment. I can call FB.ui, although FB.ui with method: 'oauth' I get an error message saying " The "redirect_uri" parameter cannot be used in conjunction with the "next" parameter, which is deprecated.". Which is very weird because I didn't used "next" parameter. But when I set next to undefined, it works fine, I get the window, but it says "Given URL is not allowed b开发者_运维问答y the Application configuration.". Expect from that, I can login, then I've got the access_token. But in the new window, getLoginStatus still doesn't do anything.

So any advices are welcome.

Thanks, Tamas

UPDATE:

function onBodyLoad() { //on body onload
    FB.init({
     appId: window.appID,
     status: true,
     xfbml: true,
     cookie: true,
     oauth: true,
     channelUrl: 'http://example.com/fb/channel.html'
    });     
   }
...
function getName() { // on button onclick
 FB.getLoginStatus(function(response){
  if (response.authResponse)
   {
    window.loggedIn = true;
    debugString('Logged in');
   } else
   {
    window.loggedIn=false; 
    debugString('Not logged in');
   }
}, true);
if (window.loggedIn === undefined)   {
     debugString('getLoginStatus did not exec'); // I always get this message
  }

}

UPDATE 2: I created a new App on a different URL, which is configured as a standalone website. There these codes work perfectly, I can getLoginStatus, I can login, etc. Is there any difference working in the context of FB, and in a standalone website, using FB JavaScript SDK?


FB.getLoginStatus does not fire the callback when you are running the website on a different domain than the one that you registered the app with. I usually find myself in this situation when I am developing locally or on a staging server.

For example, if you registered the site with example.com and your staging server is example.mystagingserver.com, the callback wont fire. In this case, you need to create a second application in Facebook and use the Application ID and Secret for the new app.


I just had the same problem, though it only happened to some users.

I finally found out that if your app is sandbox mode, none-developer users can still see your app as a pagetab. But calling getLoginStatus will fail silently (even logging turned on).

Took a while to figure that one out, I hope this can save someone else some time.


I'm using this code, successfully. I'm not quite sure where the differences are.. but I'm using the ASYNC FB Loader.

 window.fbAsyncInit = function() {
   FB.init({ appId: 'XXXXXX', //change the appId to your appId
             status: true, 
             cookie: true,
             xfbml: true,
             oauth: true});

 function authEvent(response) {

   if (response.authResponse) {
          //user is already logged in and connected
           FB.api('/me', function(info) {
              login(response, info);
            });
    } else {
          //user is not connected to your app or logged out
           button.onclick = function() {
            FB.login(function(response) {
            if (response.authResponse) {
               FB.api('/me', function(info) {
                   login(response, info);
              });   
                } else {
               //user cancelled login or did not grant authorization
             }
         }, {scope:'email,rsvp_event,status_update,publish_stream,user_about_me'});     
                    }
                }
            }

            // run once with current status and whenever the status changes
            FB.getLoginStatus(updateButton);
            FB.Event.subscribe('auth.statusChange', updateButton);  
        };
        (function() {
            var e = document.createElement('script'); e.async = true;
            e.src = document.location.protocol 
                + '//connect.facebook.net/en_US/all.js';
            document.getElementById('fb-root').appendChild(e);
        }());


        function login(response, info){
            if (response.authResponse) {
                accessToken =   response.authResponse.accessToken;
        userid = info.id;


                userInfo.innerHTML  = '<img src="https://graph.facebook.com/' + info.id + '/picture">' + info.name+"<br /> Your Access Token: " + accessToken;
            }
        }


You can use the following code to check if the user is logged in:

FB.getLoginStatus(function(response) {
    if (response.authResponse) {
        // logged in and connected user, someone you know
    } else {
        // no user session available, someone you dont know
    }
});

From FB JS SDK Documentation.

You can wrap the whole code in jQuery ready :

$('document').ready(function(){
    ... above code
})

Also you may want to check this question StackOverflow.


I had the same problem. I was working on the facebook login process of our website. During development the "FB.getLoginStatus" did not return a response. I fixed it in the settings of the app on facebook:

-In facebook go to "manage apps"

-Go to the "facebook login" settings of your app

-Add your development url (for example "https://localhost") to the "Valid OAuth Redirect URIs"

(Don't forget to remove the "https://localhost" from the OAuth Redirect URIs when you are finished with developping.)


Something common that causes this is that a browser is blocking cookies, this will cause the event not to fire. Also, make sure that if you or your user have and ad blocker that it is not blocking third party cookies.

Example of warning:

FB.getLoginStatus does not fires callback function


For me after extensive testing can confirm the dialog to log the user will not show unless you use a valid Application ID

These can be found in

https://developers.facebook.com/apps/{{Application__Id}}/settings/

Just make sure you call the api with the correct ID.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号