JS SDK auth.logout 事件行为最近似乎发生了变化——这是怎么回事?
Posted
技术标签:
【中文标题】JS SDK auth.logout 事件行为最近似乎发生了变化——这是怎么回事?【英文标题】:JS SDK auth.logout event behavior seems to have changed recently - what is going on? 【发布时间】:2012-02-08 12:05:48 【问题描述】:几个月来,我一直在将以下代码与 JS SDK 结合使用。在过去的几天里,它给我带来了各种各样的问题。
注销事件不会在注销时触发 - 我正在使用 JS XFBML 标签进行登录/注销,如下所示:
注意:单击注销按钮会从 FB 注销,但该事件不会在我的网站上触发。
-
当我在注销时重新加载页面时会触发注销事件,这会在注销事件触发时导致页面重新加载循环。因为初始注销事件没有触发,所以现在没什么大不了的。但是在今天之前,注销事件会在注销和每次页面加载(注销时)时触发,这意味着它将通过注销重定向无休止地重新加载页面。
直到几天前这一切都运行良好,我已经有几周或几个月没有接触过这部分代码了。有什么想法吗?
事件代码:
FB.Event.subscribe('auth.logout', function(response)
window.location.href = '/logout.php';
);
注意:我还在使用 php SDK 来实现网站上的其他功能 - 我使用的是两者的最新版本
我在这里找到了关于这个问题的另一篇文章,但解决方案是删除重新加载,这是一个糟糕的解决方案 - 为什么这个 JS 事件会以这种方式工作?
谢谢!
【问题讨论】:
我也遇到了类似的困难,你有进步吗? 我的解决方案是简单地从站点中删除 FB 注销功能。我认为人们并不真的想从我的网站上注销 FB(也许这也是 FB 的想法) - 所以我只允许直接注销我的网站,而不会触及 FB 凭据。我想要的一件事是通过FB在用户注销时触发注销事件,这样我就知道他们没有完全登录到我的网站——它使用了很多ajax,所以用户不会加载新页面如果 FB 连接不存在,通常很多功能都会被破坏,所以现在我必须检查状态 【参考方案1】:好吧,我想出了一个解决方法,尽管我一点也不为此感到自豪。我正在使用这些事件:
FB.Event.subscribe('auth.login', function(response)
setTimeout('document.location.reload()',0);
);
FB.Event.subscribe('auth.logout', function(response)
<? if ($_SESSION['user']['id']): unset($_SESSION['user']); ?>
setTimeout('document.location.reload()',0);
<? endif; ?>
);
我将所有用户信息存储在会话中,并且有关 SESSION 的条件确保页面不会以循环结束。使用 setTimeout 是因为 Facebook javascript SDK window location reload not working on Firefox 。 比我添加了一个 jQuery 函数来在单击 logoutButton 后重新加载页面:
$(function()
$('#logoutButton').click(function()
setTimeout('document.location.reload()',0);
);
);
<span id="<?= $user ? "logout" : "login" ?>Button">
<fb:login-button autologoutlink="true"></fb:login-button>
</span>
我已经在 Firefox 和 Chrome 上对此进行了测试,并且运行良好。这不是真正的解决方案,它更像是丑陋的修复:),但我还是决定发布它。我现在实际上正在考虑放弃整个“注销操作”,因为大多数用户无论如何都不希望从 Facebook 注销。
【讨论】:
" 我现在实际上正在考虑放弃整个“注销操作”,因为大多数用户都不希望从 Facebook 注销。”是的,这正是我来到的位置:)以上是关于JS SDK auth.logout 事件行为最近似乎发生了变化——这是怎么回事?的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 5.2:Auth::logout() 不起作用
auth.logout 在我的应用程序中无法使用 firebase facebook 身份验证