在Facebook上实时获取用户登录状态

Get user login status on Facebook by real time

本文关键字:用户 登录 状态 获取 实时 Facebook      更新时间:2023-09-26

这个问题与我的另一个问题有关:如何知道如果用户退出Facebook, FB.Event.Subscribe不起作用

在这个问题中,我试图在用户注销Facebook时获得回叫事件。但既然还没有合适的答案,我必须尝试另一种方法。我尝试通过javascript轮询来获取用户的登录状态,如下所示:

        function checkLogin()
        {
            alert("in");
            FB.getLoginStatus(function(response) {
              if (response.status == "connected") {
                // logged in and connected user, someone you know
                alert("ok - 5 seconds has passed");
              } else {
                // no user session available, someone you dont know
                alert("not ok");
              }
            });
            t=checkLogin("timedCount()",5000);
        }

这样做的问题是:函数只有在第一次调用时才返回正确的结果。之后,结果似乎被缓存,我不断收到"连接"响应,尽管用户默默地通过浏览器中的另一个选项卡注销。

这是不好的,因为当时Facebook弹出一个对话框,要求用户登录。但是如果用户取消了它,他仍然可以使用我的应用程序(因为他与我的应用程序服务器的会话还没有过期!)。

在文档中,FB开发者说:

当你调用FB。getLoginStatus,则可以向登录www.facebook.com查看用户的当前状态。然而,如果FB。在此浏览器会话期间已经调用了getLoginStatus,并且会话已被持久化在cookie中,HTTP请求到可能不需要Facebook.com

所以我认为这个效果是缓存造成的。我想知道为什么Facebook这样做。

有人知道解决这个问题的方法吗?

谢谢你的帮助,

黄平君长

我花了很长时间,直到我的一个同事最终解决了这个问题。

解决方案是我们需要再次调用FB.init(),在调用getLoginStatus之前先调用cookie:false。这将删除cookie并获得新信息。

FB.init({ 
        appId:'${appId}', 
            cookie: false, 
        status: true, 
        xfbml: true 
    });
FB.getLoginStatus(function (response) {
        if (response.session) {
                alert("here");
        }
});