Cakephp Auth->user() null


Cakephp Auth->user() null

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

这是我在应用程序控制器中的身份验证配置.php

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())打印NULL

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

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

如果找不到标头的发送位置,请尝试使用 headers_sent(( 函数传入参数来找出标头最初发送到的位置。

为此,您可以从 php 文件中省略 php 结束标记 (?>(,如控制器,模态