我知道这一定是非常愚蠢的事情,但我遇到了退出问题。调用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>";
我错过了一些基本的东西吗?谢谢!
答案 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)
答案 6 :(得分:0)
我无法理解为什么这个不起作用,因为我使用完全相同的代码...... 你确认该方法实际上被调用了吗?一个简单的“die('xyz')”等,在Auth注销部分之前可以确认你的动作代码被触发了。