【问题标题】:Cakephp Auth->user() nullCakephp Auth->user() null
【发布时间】:2015-01-07 13:04:33
【问题描述】:

在我的 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()) 会打印NULL

静态页面不能使用用户身份验证吗?

【问题讨论】:

    标签: php cakephp


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-04
        • 2011-12-20
        • 2016-05-11
        • 1970-01-01
        • 2013-12-15
        • 1970-01-01
        • 2017-03-17
        • 1970-01-01
        相关资源
        最近更新 更多