JS SDK auth.logout事件行为最近似乎发生了变化

JS SDK auth.logout event behavior seems to have changed recently - what is going on?

本文关键字:最近 发生了 变化 SDK auth logout 事件 JS      更新时间:2023-09-26

几个月来,我一直在将以下代码和JS SDK结合使用。在过去的几天里,它给了我各种各样的问题。

  1. 注销事件不会在注销时触发-我使用JS XFBML标记进行登录/注销,如:

注意:点击注销按钮确实会从FB注销,但事件不会在我的网站上触发。

  1. 当我在注销时重新加载页面时,注销事件确实会触发,这会在注销事件触发时导致页面重新加载循环。现在没什么大不了的,因为初始注销事件没有启动。然而,在今天之前,注销事件在注销和每次页面加载(注销时)时触发,这意味着它将通过注销重定向无休止地重新加载页面

直到几天前,这一切都很好,我已经好几个星期或几个月没有接触过这部分代码了。有什么想法吗?

事件代码:

FB.Event.subscribe('auth.logout', function(response) {
    window.location.href = '/logout.php';
    });

注意:我也在使用php SDK来实现网站上的其他功能-我使用的是两个的最新版本

我在这里找到了另一篇关于这个问题的帖子,但解决方案是删除重载,这是一个糟糕的解决方案——为什么这个JS事件会这样工作?

谢谢!

好吧,我想出了一个变通办法,尽管我一点也不自豪。我正在使用这些事件:

 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窗口位置重载在Firefox上不起作用。然后我添加了一个jQuery函数来在点击注销按钮后重新加载页面:

$(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注销。