【问题标题】:Log out with Facebook Connect in a Cakephp app在 Cakephp 应用程序中使用 Facebook Connect 注销
【发布时间】:2009-07-22 03:07:07
【问题描述】:

我想在我正在开发的 Cakephp 应用程序中包含 Facebook Connect。现在,我正在尝试使用 Facebook Connect 实现自动登录。只要用户的 Facebook Connect 状态为“已连接”,我就可以通过向 $this->Session 写入内容来启动新的登录会话,因此我已经完成了该功能的前半部分。当用户尝试注销时,问题就出现了。就像 The Run Around 演示应用一样,我有一个这样的链接:

<a onclick="FB.Connect.logout(redirect_to_logout_action)">log out</a>

注销操作会清除登录会话变量,但在下一页上,用户仍然登录到我的站点,但没有登录 Facebook。如果用户再次点击注销链接,他可以注销我的网站,所以我认为当他第一次尝试这样做时,他会在我的网站上获得一个 new 登录会话,因为 facebook_client ()->get_loggedin_user() 仍在返回一些东西。我在这里做错了吗?我想当我的服务器收到注销请求时,FB.Connect.logout 会清除 Facebook cookie:?

【问题讨论】:

    标签: cakephp facebook


    【解决方案1】:

    让你的javascript先做:

    FB.Connect.logout
    

    然后

    location.href="/logout.php";
    

    并且在 logout.php 上有

    session_destroy();
    session_start();
    

    【讨论】:

    • 我认为这正是我正在做的。可能不清楚,因为我的问题的原始标记(即降价)有问题。您可能错过的部分是 标签
    【解决方案2】:

    正如 abales 所说,我会确保任何注销操作都被重定向到针对 CakePHP Session 组件调用以下方法:

    $this->Session->destroy();
    

    这应该消除 Cake/PHP 会话。之后,重定向到适合未登录用户的任何控制器+操作。

    【讨论】:

    • 我想我正在做你们两个期望的事情。我正在使用破坏,因为会话中可能还有其他不应该被破坏的东西。我知道删除我要删除的变量是结束登录会话的正确做法,因为我们在开始集成 FB Connect 之前就是这样做的。
    【解决方案3】:

    你的代码,

    我在几个月前构建的应用中遇到了类似的问题。我们使用的是 Facebook 组件(就像在这里找到的那​​个:来自http://savarino.net/facebook-cakephp)。

    如果我没记错的话,我们最终构建了一个如下所示的注销方法:

    $logout_url = $this->Facebook->facebook->get_logout_url('http://' . $_SERVER['SERVER_NAME'] . $this->webroot);
    try {
        $this->Facebook->facebook->expire_session();
    } catch (Exception $e) {
        $this->Facebook->facebook->set_user(null, null);
        $this->Facebook->facebook->clear_cookie_state();
    }
    
    $this->redirect($logout_url);
    

    很抱歉,我不能说得更具体。自从我回到那个应用程序(以及从那时起的几个项目)以来已经有几个月了,但希望这会为您指明正确的方向。

    赛斯

    【讨论】:

      猜你喜欢
      • 2013-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 2011-08-07
      • 1970-01-01
      • 2014-09-05
      相关资源
      最近更新 更多