这让我发疯了。用户登录我的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请求的权限。我只是要求电子邮件和短信。那么....任何建议?
答案 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)
尝试使用
初始化FBstatus: false
所以它会像你期望的那样工作。它对我有用