Cakephp Auth-> user()null

时间:2014-11-11 03:50:06

标签: php cakephp

在我的CakePHP应用程序中,如果用户未登录,我希望在每个页面上都包含一个登录表单,如果他们已登录,则需要一个注销按钮。

这是AppController.php中的Auth配置

var $components = array
(
    'Auth' => array
    (
        'authenticate' => array
        (
            'Form' => array
            (
                'fields' => array('username' => 'email'),
                'passwordHasher' => array
                (
                    'className' => 'Simple',
                    'hashType' => 'sha256'
                )
            )
        )
    ),
    'Session'
);

我想设置一个可在所有视图中使用的标志,以检查用户是否已登录。我试图通过AppController :: beforeFiter()

执行此操作
function beforeFilter()
{
    parent::beforeFilter();
    $this->layout = 'default'; 
    var_dump($this->Auth->user());
    $this->set("isLoggedIn",$this->Auth->loggedIn());
}

每个控制器都可以工作,除了PagesController。只是为了确保它不是允许/拒绝问题,这是PagesController :: beforeFilter

function beforeFilter()
{
    parent::beforeFilter();
    $this->Auth->allow();       
}
实际上,当我转到我的主页时,AppController :: beforeFilter()会被调用,但AppController :: beforeFilter()中的var_dump($ this-> Auth-> user())会打印出来。

用户身份验证不适用于静态页面吗?

2 个答案:

答案 0 :(得分:1)

经过大量调试后我发现了这个问题。问题是PagesController在括号之前或之后有一个额外的空白字符。因此,标头已被视为已发送,并且无法正确调用session_start()。如果其他人遇到这种情况,请检查控制器或型号中的空白区域。

如果找不到发送标头的位置,请尝试使用headers_sent()函数传入参数,以找出标头首次发送的位置。

答案 1 :(得分:0)

为此,您可以从控制器,模态

等php文件中省略php关闭标记(?>)