CakePHP注销问题

时间:2011-08-07 00:35:32

标签: cakephp

我知道这一定是非常愚蠢的事情,但我遇到了退出问题。调用Auth-> logout()后,我仍然可以看到完整的用户Auth变量。在我的用户控制器中,我有标准:

function login()
{
}

function logout()
{
  $this->redirect($this->Auth->logout());
}

但是当我呼叫注销时,在我的视图中,我仍然可以通过这样做来打印用户:

$auth = $this->Session->read('Auth.User');
print "<pre>";
print_r($auth);
print "</pre>";

我错过了一些基本的东西吗?谢谢!

7 个答案:

答案 0 :(得分:5)

矿:

function logout() {
    $this->Session->destroy();
    $this->redirect($this->Auth->logout());
}

答案 1 :(得分:5)

您未允许使用注销功能,并且用户被重定向而不是注销。

在包含注销函数的控制器中,将其添加到之前的过滤器中:

    $this->Auth->allow('logout');

答案 2 :(得分:1)

在app控制器中,您必须定义loginAction,如果是未授权的条目,则视图会重定向到该URL

'Auth' => array(
    'loginRedirect' => array('controller' => 'products', 'action' => 'all'),
    'logoutRedirect' => array('controller' => 'products', 'action' => 'index'),
    'loginAction' => array('controller'=>'admins', 'action'=>'login'),
)

答案 3 :(得分:1)

你会发现如果你只是在UserController中用这一行创建一个beforeFilter()函数,你就会破坏Users模型的授权。也就是说,任何用户都可以进行用户/添加,用户/编辑等。要解决此问题,请确保调用AppController的beforeFilter。完整的beforeFilter()函数如下所示:

public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('logout');
}

答案 4 :(得分:0)

如果CakePHP正在使用PHP会话而不是自己编写,您可以通过session_destroy();清除会话。对不起,我没有CakePHP经验,所以我只是假设。

答案 5 :(得分:0)

你有什么蛋糕版吗?我认为你必须在Cake 1.2中手动清除会话。在较新的Cake中,如果调用logout函数,它将清除Auth.User;我很确定。

答案 6 :(得分:0)

我无法理解为什么这个不起作用,因为我使用完全相同的代码...... 你确认该方法实际上被调用了吗?一个简单的“die('xyz')”等,在Auth注销部分之前可以确认你的动作代码被触发了。