在我的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())会打印出来。
用户身份验证不适用于静态页面吗?
答案 0 :(得分:1)
经过大量调试后我发现了这个问题。问题是PagesController在括号之前或之后有一个额外的空白字符。因此,标头已被视为已发送,并且无法正确调用session_start()。如果其他人遇到这种情况,请检查控制器或型号中的空白区域。
如果找不到发送标头的位置,请尝试使用headers_sent()函数传入参数,以找出标头首次发送的位置。
答案 1 :(得分:0)
为此,您可以从控制器,模态
等php文件中省略php关闭标记(?>)