【问题标题】:Facebook logout button and redirect after logoutFacebook注销按钮并在注销后重定向
【发布时间】:2011-06-15 19:09:31
【问题描述】:

我用这个代码

<fb:login-button autologoutlink="true" perms="user_likes" size="large"></fb:login-button>

创建登录/注销 fb 按钮。 一切正常,登录后,登录按钮变为注销按钮。但是如果用户点击注销按钮,当前页面不会刷新,因此只有在用户通过身份验证时才会出现的所有内容仍然存在,直到手动页面刷新完成。

如果我获得注销 url (Javascript SDK),则不会发生这种情况

$logoutUrl = $facebook->getLogoutUrl();

然后自己实现一个注销按钮;在这种情况下,传递一个正确的“next”参数(带有当前页面的 url)并重新加载当前页面。

我还是想用第一个解决方案,是否可以让它使用“next”参数?

【问题讨论】:

标签: facebook logout


【解决方案1】:

Piskvor 的上述回答为我做了。我花了多少时间试图弄清楚这一点真是太疯狂了。

像 Facebook for CakePHP 这样的插件的主要问题是它们没有更新。 API,尤其是 Facebook 等流行的 API,一直在变化,因为它们正在被改进。如果最初作为爱好编写它的人继续他的生活并停止更新 SDK,那么对如何改变这些东西不太了解的人就会陷入困境。

工作代码:

不过,感谢 Piskvor 的出色解决方案,这是我的一段代码

apps/plugins/facebook/views/helpers/facebook.php

            $init .= $this->Html->scriptBlock(
<<<JS

window.fbAsyncInit = function() {
    FB.init({
        appId : '{$appId}',
        session : {$session}, // don't refetch the session when PHP already has it
        status : true, // check login status
        cookie : true, // enable cookies to allow the server to access the session
        xfbml : true // parse XFBML
    });
     FB.Event.subscribe("auth.logout", function() {
       window.location = '/users/logout'
     });
    {$callback}
};

这里的关键代码是:

     FB.Event.subscribe("auth.logout", function() {
         window.location = '/users/logout'
     });
    {$callback}

【讨论】:

  • 请不要添加“谢谢”作为答案。在网站上投入一些时间,您将获得足够的 privileges 来为您喜欢的答案投票,这是 Stack Overflow 表达感谢的方式。
【解决方案2】:

对于集成身份验证(Facebook + Asp.Net MVC),我只使用 Javascript 和 FormsAuthentication.SignOut();

function LogoutFacebook() {    
FB.logout(function (response) {
    window.location = "/facebook/logout/";
});   }

【讨论】:

    【解决方案3】:

    自己进行重定向 - 将其添加到 JavaScript,在 FB.init() 之后的某处:

    <script>
      FB.Event.subscribe("auth.logout", function() {window.location = '/logout'});
    </script>
    

    当通过 FB 按钮注销时会触发此功能。

    【讨论】:

    • 完美运行,非常感谢。我应该注意到在我的示例代码中已经有 aFB.Event.subscribe('auth.login', function() {window.location.reload() });对于登录部分。对注销执行相同的操作是正确的方法。
    • @Eugenio:不客气。几个月前我也在做同样的事情,我认为这是一个很常见的问题:)
    猜你喜欢
    • 2016-01-21
    • 2012-11-05
    • 2012-05-04
    • 1970-01-01
    • 2012-05-22
    • 2020-04-16
    • 1970-01-01
    • 2018-12-14
    • 1970-01-01
    相关资源
    最近更新 更多