无法使用CakePHP 4中的setUser在Auth中设置用户

问题描述

在CakePHP 4.0中

当我尝试执行$this->Auth->setUser($user)时,出现此错误

\ cakePHP \ cakePHP \ src \ Http \ Session.PHP-参数1传递给 Cake \ Http \ Session :: _ overwrite()必须是受保护的数组类型 函数_overwrite(array&$ old,array $ new):无效

这是我的代码

$user = $this->Auth->identify();
if ($user) {
    $this->Auth->setUser($user);
}

当我尝试var_dump($user)时,其中包含用户详细信息。

请帮助我,因为$ user不是数组,我无法传递数组

解决方法

此问题既不是由于先前生成的某些输出(在我的情况下为警告)也不是会话的其他错误配置引起的。 当您仔细查看Session.php尤其是write()方法时,您会看到以下部分代码:

  if (!$this->started()) {
      $this->start(); //this may result in false but cakephp ignores it here... 
  }
 
$this->_overwrite($_SESSION,$data); //will fail for no session_start() has been invoked yet

因此,即使您的会话尚未启动,脚本也会进一步处理,这将导致您出现错误消息。 因此,请检查您是否可以通过此认证:

 if (ini_get('session.use_cookies') && headers_sent()) {
            
     //error headers already send
 }

只要您不通过它,就无法将任何数据写入会话

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...