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 身份验证

laravel5.2之logout注销账号无效

使用“服务器端工作流程”(OAuth 2.0)登录后,正在引发 FB auth.logout

Tank Auth 的 Codeigniter 路由设置

Laravel 5 - 在视图中使用 Auth::check()