在我的 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 结束标记 (?>(,如控制器,模态