Cake PHP 2.x Auth数据仅在一个控制器中可用,在其余控制器中为null。知道为什么吗?

时间:2013-01-24 20:03:41

标签: session cakephp login controller authorization

我是CakePHP的新手,尽管搜索高低,但我无法找到一个看似微不足道的问题的答案。问题是通过我的UserController登录后,我丢失了$this->Auth->user()中所有其他控制器上的数据。任何与UserController无关的视图都将始终具有空数据,$this->Auth->loggedIn()将返回false。

在我的AppController类中,我试图将数据保存到beforeFilter()内的变量中,以便我可以在视图中检查变量,但它没有什么区别。这是我的UserController和AppController类的相关代码:

class AppController extends Controller {

// Pass settings in $components array
public $components = array(
    'Session',
    'Auth' => array(
        'loginRedirect' => array('controller' => 'home', 'action' => 'index'),
        'logoutRedirect' => array('controller' => 'home', 'action' => 'index')
    )
);

public function beforeFilter() {
    //debug($this->Auth->user());
    $this->set('loggedIn', $this->Auth->user());    

    }

}

用户类:

App::uses('AppController', 'Controller');

class UsersController extends AppController {

public $helpers = array('Html', 'Form');
public $name = 'Users';

public function beforeFilter() {
    parent::beforeFilter();
}

public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            return $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash(__('Username or password is incorrect'), 'default', array(), 'auth');
        }
    }
}

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

}   

我还确保在我的其他控制器中使用parent::beforeFilter()

2 个答案:

答案 0 :(得分:2)

我相信我找到了解决方案。在我的HomeController中,这是我登录后总是查看的页面,似乎在关闭php声明?>之后有一些不可见的字符(也不需要),所以我删除了它和{ {1}}瞧,一切都按预期工作。

在我尝试在我的布局中手动使用?>之后,我发现有些不对劲,我在HomeController类中session_start()之后发生错误。

答案 1 :(得分:1)

我认为您应该在loggedIn课程的beforeRender()函数中设置AppController,而不是beforeFilter()

public function beforeRender() {
    $this->set('loggedIn', $this->Auth->user());   
}