即使用户已从Facebook注销,FB.getLoginStatus也会返回会话
这让我快发疯了。一个用户登录到我的Facebook应用程序,做一些事情。然后转到Facebook并注销。我有一个小计时器,每隔一段时间调用FB.getLoginStatus(),查看用户是否仍在登录。但无论何时调用FB.getLoginStatus(),它都会返回一个带有会话对象的响应。世界跆拳道联盟?它不应该返回未定义/未知吗 我使用的是对Facebook evar最基本的呼叫:即使用户已从Facebook注销,FB.getLoginStatus也会返回会话,facebook,facebook-javascript-sdk,Facebook,Facebook Javascript Sdk,这让我快发疯了。一个用户登录到我的Facebook应用程序,做一些事情。然后转到Facebook并注销。我有一个小计时器,每隔一段时间调用FB.getLoginStatus(),查看用户是否仍在登录。但无论何时调用FB.getLoginStatus(),它都会返回一个带有会话对象的响应。世界跆拳道联盟?它不应该返回未定义/未知吗 我使用的是对Facebook evar最基本的呼叫: FB.init({ appId: 'MY APP ID', cookies: false,
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请求的权限。我只是要求电子邮件和短信。所以有什么建议吗?您确定当用户注销时会话总是被破坏吗?也许这只是会话中的一个变量,如果用户登录或注销,该变量会发生变化……。我在使用您的代码时遇到了同样的问题。 到目前为止,我唯一的解决方法是在每次查询登录状态时初始化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);
通过这种方式,我总能获得正确的会话状态。如果有更有效的方法,请告诉我 尝试使用初始化FB
status: false
因此,它将按照您的预期工作。这对我来说很管用别这么辛苦。这种情况有一个简单的解决方案,只需添加一个“true”语句作为getLoginStatus方法的第二个参数:
FB.getLoginStatus(function (response) {
if (response === undefined || response.status === 'connected') {
// Do something after logout
}
}, true);
请注意,每次调用此功能都会使你的应用程序进入Facebook的服务器,并会根据你的实现给你带来相当大的网络负载。希望这有帮助 我不知道用户何时注销,所以我不知道何时销毁会话。如果FB.getLoginStatus返回正确的状态,那么我就可以销毁我这边的所有东西。这正是我要找的!