Javascript Facebook JS SDK FB.logout()不';t终止用户会话
我正在尝试使用facebook JS SDK将用户从facebook注销,但调用:Javascript Facebook JS SDK FB.logout()不';t终止用户会话,javascript,facebook,facebook-javascript-sdk,Javascript,Facebook,Facebook Javascript Sdk,我正在尝试使用facebook JS SDK将用户从facebook注销,但调用: FB.logout(function(response){ console.log(response); }); 返回: response.status==“已连接” 只有在刷新页面之后,SDK才会意识到会话已经结束。有人知道是什么导致了这种行为吗?这段代码以前在我的应用程序中工作过,最近开始以这种方式运行 使用FireBug的另一个示例: 我对FB.Logout()没有像广告那样工作有同样的经验。作为
FB.logout(function(response){
console.log(response);
});
返回:
response.status==“已连接”
只有在刷新页面之后,SDK才会意识到会话已经结束。有人知道是什么导致了这种行为吗?这段代码以前在我的应用程序中工作过,最近开始以这种方式运行
使用FireBug的另一个示例:
我对
FB.Logout()
没有像广告那样工作有同样的经验。作为一种解决方法,我使用下面的javascript函数检查用户是否登录,如果是,则使用要加载的后续页面的URL及其访问令牌重定向到:
function reallylogout() {
FB.getLoginStatus(function (response) {
if (response.authResponse) {
window.location = "https://www.facebook.com/logout.php?next=" +
'URL to redirect to' +
"&access_token=" + response.authResponse.accessToken;
} else {
$("#loginButtonDiv").show();
$("#logoutButtonDiv").hide();
}
});
}
show/hide位只是jQuery,用于显示或隐藏具有登录和注销按钮的div。注销按钮的onclick触发reallyLogout()函数
这适用于我的应用程序。请参阅
当您注销时,会向Facebook发送一个跨域请求,以使会话无效。当你点击“重新加载”时,另一个请求会被发送到Facebook的网站——因为FB识别出cookie无效,它会正确地从你的浏览器中删除cookie
我怀疑这是一个regexp错误,因为他们忘了解析fbm_uuCookie,这是最近一天左右引入的。我只是很惊讶,这个补丁还没有推出。
这是JS SDK中的一个错误,现在已经修复,应该在不太长的时间内将其推入。在此之前,您可以执行以下操作
FB.logout(function(response) {
FB.Auth.setAuthResponse(null, 'unknown');
...
});
我也遇到过类似的问题。我在注销后使用了
FB.getLoginStatus()
。它在Facebook中似乎已损坏。在FB rell上,您可以登录,但注销功能不起任何作用 这可能不起作用,因为你没有包括你的Facebook应用程序密钥。它对我来说是这样的:
Ext.get('auth-logoutlink').on('click', function(){
FB.getLoginStatus(function (response) {
if (response.authResponse) {
window.location = "https://www.facebook.com/logout.php?confirm=1&api_key=**MYAPIKEY**&next=" +
'**MYWEBSITEURL**' +
"&access_token=" + response.authResponse.accessToken;
} else {
//HIDE **LOGOUT BUTTON**
//SHOW **LOGIN BUTTON**
}
});
});
好了,伙计们,我找到了一个解决方案: 为注销设置onClick事件
在asp.net mvc应用程序中,我按照以下步骤操作
此FB.logout方法100%有效。 问题是,用户试图从不起作用的localhost调用它
请尝试从服务器上调用它。因为我花了很多时间来了解FB注销的具体情况,所以最好在这里与其他人共享 首先,请阅读文档 一个人登录Facebook,然后登录你的应用程序。从你的应用程序注销后,此人仍然登录到Facebook 这一点消耗了我90%的时间。当我从facebook.com登录并尝试在我的应用程序中测试登录按钮时,它按预期工作,但注销并没有终止会话 解决方案或修复:根据文档中给出的场景,它不会终止用户会话,因为登录不是从应用启动的,而是从facebook.com启动的。因此在这种情况下,fb不会终止会话 当你登录到FB时,从你的应用程序(新鲜登录作为用户名和密码),系统考虑会话的源/触发器作为应用程序。因此,当您注销(window.FB.logout或FB.logout)时,它将完全终止用户会话 因此,在测试应用程序的登录功能之前,请先从facebook.com注销。 如前所述,使用以下代码注销
FB.logout(function(response) {
// response from logout will have authResponse with access_token so better to test the status as it will return "unknown"
if(response.status !== "connected") { } \\ do some check on the status of the login before considering successful logout.
});
最后但并非最不重要的一点:要从本地主机进行测试,请更新FB应用程序中的设置
这将解决从localhost进行测试时遇到的问题在调用注销时,以及在刷新页面之前,如果您访问Facebook,您是否仍然连接?如果您连续两次调用注销,是相同的响应吗?(如果不是的话,这不只是呼叫和响应之间的时间问题吗?)(而且,即使它没有回答“为什么”部分,你不能通过在响应中重新加载页面来解决这个问题吗?)哦,最后一个,“未定义”是另一个控制台。我想是吧?@Flow's,是的,“未定义”是一个不相关的控制台日志。logout()会将用户从facebook注销,但当前页面FB对象直到刷新后才意识到这一点。我强烈希望在用户注销后不必手动刷新页面。我还试图删除fbsr_uuCookie,看看这是否删除了它——没有效果。这以前是有效的,最近才改变。另外,我在hulu.com上尝试了同样的测试,它使用FBJSSDK,结果相同。这可能是SDK中的一个bug吗?我目前正在从
FB.logout
回调中使用FB.getLoginStatus
,以确保JS-SDK忘记用户。顶部提示:FB API在很多层面上都有很多细微差别。帮自己一个忙,使用https://connect.facebook.net/en_US/sdk/debug.js
而不是https://connect.facebook.net/en_US/sdk.js
在初级开发期间。您将在控制台中看到可爱的蓝色调试消息,您可以通过文件名(debug.js)对其进行过滤:-)这是可行的,但我正在寻找一种解决方案,可以触发FB js SDK“忘记”登录用户,而无需执行页面刷新。直到几周前,这个功能还有效,从那以后我就没有做过任何改变。谢谢你和我一起工作,解决了我的大问题,谢谢:)我尝试过,但是,功能(响应)从未执行过,有什么想法吗?@JaredEitnier什么不起作用?第三版是什么?作为jssdk的主要贡献者,有趣的是,我没有听说过这一点:)我昨天在疲惫的头脑中不知怎么把PHP-SDK和JS-SDK搞混了,我想哈哈。不管怎样,愚蠢的评论消失了:)似乎注销成功,但对我来说,FB.Auth.setAuthResponse(null,'unknown')之后的语句
没有调用,就像一个简单的alert()FB.Auth
,我使用Facebook SDK 2.5时不存在Auth。在我的情况下,是的,你是对的。它在本地主机上不工作。但是我不确定你的话是否有效
<a href="#"
id="auth-logoutlink"
style="float:left;font-size: small;"
onclick="FB.logout(function() { document.location.reload(); });">
[logout]
</a>
<a href="javascript:void(0);" class="logOff">Log out</a>
$(function () {
$(".logOff").click(function () {
//check if logout is
FB.getLoginStatus(function (response) {
console.log('inside login status');
if (response.status === 'connected') {
// the user is logged in and has authenticated your
// app, and response.authResponse supplies
// the user's ID, a valid access token, a signed
// request, and the time the access token
// and signed request each expire
var uid = response.authResponse.userID;
var accessToken = response.authResponse.accessToken;
FB.logout(function (response) {
FB.Auth.setAuthResponse(null, 'unknown');
});
} else if (response.status === 'not_authorized') {
// the user is logged in to Facebook,
// but has not authenticated your app
} else {
// the user isn't logged in to Facebook.
console.log('response status not logged in');
}
});
window.location.href = '@Url.Action("LogOff", "Account")';
});
FB.logout(function(response) {
...
});
FB.logout(function(response) {
// response from logout will have authResponse with access_token so better to test the status as it will return "unknown"
if(response.status !== "connected") { } \\ do some check on the status of the login before considering successful logout.
});