Невозможно установить пользователя в Auth, используя setUser в CakePHP 4

В CakePHP 4.0

Когда я пытаюсь сделать $this->Auth->setUser($user), я получаю эту ошибку:

\cakephp\cakephp\src\Http\Session.php - Аргумент 1, переданный в Cake\Http\Session::_overwrite(), должен иметь тип array protected function _overwrite(array &$old, array $new): void

Это мой код:

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

Когда я пытаюсь var_dump($user), он содержит данные пользователя.

Пожалуйста, помогите, я не могу передать массив, так как $user не является массивом


person Madhu Jayarama    schedule 11.09.2020    source источник
comment
Вы не используете плагин аутентификации? AuthenticationPlugin поставляется с setIdentity. Вы будете использовать setIdentity вместо setUser.   -  person Karma    schedule 29.09.2020
comment
Можете ли вы предоставить ссылку для этого?   -  person Madhu Jayarama    schedule 30.09.2020


Ответы (1)


Эти проблемы не возникают ни из-за какого-то ранее сгенерированного вывода (в моем случае предупреждения), ни из-за другой неправильной конфигурации вашего сеанса. Если вы внимательно посмотрите на 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
 }

Пока вы не передадите его, вы не сможете записать какие-либо данные в свою сессию.

person Christian Felix    schedule 13.11.2020