即使用户退出Facebook,FB.getLoginStatus也会返回一个会话

时间:2011-07-27 23:44:11

标签: facebook facebook-javascript-sdk

这让我发疯了。用户登录我的Facebook应用程序,做一些事情。然后去Facebook并注销。我有一个小计时器,每隔一段时间调用一次FB.getLoginStatus()来查看用户是否仍然登录。但是每当调用FB.getLoginStatus()时,它都会返回一个带有会话对象的响应。 WTF?它不应该返回undefined / unknown吗?

我正在使用Facebook evar的绝对最基本的调用:

FB.init({
    appId: 'MY APP ID',
    cookies: false,
    status: true,
    xfbml: false
});

FB.getLoginStatus(function (response) {
    if (response.session) {
        console.info("Session exists");
    } else {
        console.info("Session empty");
    }
});

setInterval(function () {
    FB.getLoginStatus(function (response) {
        if (response.session) {
            console.info("Session exists");
        } else {
            console.info("Session empty");
        }
    });
}, 10000);

我检查并仔细检查了使用allow请求的权限。我只是要求电子邮件和短信。那么....任何建议?

4 个答案:

答案 0 :(得分:3)

不要以艰难的方式去做。这种情况有一个简单的解决方案,只需在 getLoginStatus 方法中添加“ true ”语句作为第二个参数:

FB.getLoginStatus(function (response) {
   if (response === undefined || response.status === 'connected') {
      // Do something after logout
   }
}, true);

请注意,每次调用此功能都会使您的应用程序转到Facebook的服务器,并根据您的实施情况为您提供相当大的网络负载。希望这可以帮助!

答案 1 :(得分:2)

我在使用您的代码时遇到了同样的问题。 到目前为止我唯一的解决方法是每次查询登录状态时初始化sdk:

setInterval(function () {
                FB.init({
                  appId      : 'xxxx', // App ID
                  channelUrl : 'xxxx', // Channel File
                  status     : true, // check login status
                  cookie     : true, // enable cookies to allow the server to access the session
                  oauth      : true, // enable OAuth 2.0
                  xfbml      : true  // parse XFBML
                });
                FB.getLoginStatus(function (response) {
                    if (response.authResponse) {
                        console.info("Session exists");
                    } else {
                        console.info("Session empty");
                    }
                });
            }, 10000);

通过这种方式,我总能获得正确的会话状态。如果有更有效的方法,请告诉我!

答案 2 :(得分:0)

用户注销时,您确定会话总是被销毁吗?也许只是会话中的var会在用户登录或退出时发生变化....?

答案 3 :(得分:0)

尝试使用

初始化FB
status: false

所以它会像你期望的那样工作。它对我有用