Facebook Javascript SDK Logout崩溃Facebook应用程序

时间:2016-01-15 15:13:54

标签: facebook-javascript-sdk

我将Facebook登录整合到我的应用程序/网站并使用Facebook的标准Javascript代码:https://developers.facebook.com/docs/facebook-login/web

首次使用时,在授予网站基本权限后,一切正常,登录正常,statusChangedCallback()函数返回:

Object {status: "connected", authResponse: Object}

但是,使用以下命令执行注销:

function logout()
{
    FB.logout(function(){document.location.reload();});
}

......似乎无法恢复/破坏应用程序。

每次后续登录尝试都会返回:

Object {authResponse: null, status: "unknown"}

我已尝试以下操作无效。

  • 直接登录和退出Facebook无效。
  • 清除浏览器cookie无效。

我已经确定了导致问​​题的退出呼叫,因为让它再次运行的唯一方法是通过Facebook开发者控制台删除应用程序并创建一个带有新应用ID的新应用

以前有人见过这种行为吗?

2 个答案:

答案 0 :(得分:4)

有一个名为" fblo _ *"的cookie。在FB.logout()之后创建,这似乎就是这个原因。我不能确切地说出它为什么以及它的作用,但删除它会使登录再次起作用。

因此我创建了一个小脚本来查找这个cookie并在我调用FB.login()之前将其删除,你甚至可以通过点击来调用它(https://developers.facebook.com/docs/reference/javascript/FB.login/v2.5)。

function delete_cookie(name) 
{
    document.cookie = name + '=; expires=Thu, 01 Jan 1970 00:00:01 GMT; path=/';
}


var cookies = document.cookie.split(";");
for (var i = 0; i < cookies.length; i++)
{
    if(cookies[i].split("=")[0].indexOf("fblo_") != -1)
        delete_cookie(cookies[i].split("=")[0]);
}

答案 1 :(得分:0)

如上所述,调用以下函数似乎错误地指示我认为存在问题:

FB.getLoginStatus(function(response) {
    statusChangeCallback(response);
});

这会重复以下内容:

Object {authResponse: null, status: "unknown"}

但是,如果我改为使用:

FB.login(function(response) {
}

我可以在注销后登录,更重要的是可以访问从facebook返回的用户ID来识别用户。