В моем приложении CakePHP я хочу включить форму входа на каждую страницу с кнопкой входа в систему, если пользователь не вошел в систему и кнопка выхода из системы, если они вошли в систему.
Вот моя конфигурация Auth в AppController.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() действительно вызывает вызов, когда я перехожу на домашнюю страницу, но var_dump ($this-> Auth-> user()) в AppController :: beforeFilter() печатает NULL.
Является ли аутентификация пользователя недоступной для статических страниц?
Я нашел проблему после много отладки. Проблема в том, что у PagesController был дополнительный символ пробела до или после скобок. Поэтому заголовки считались уже отправленными, а session_start() нельзя было назвать должным образом. Если это произойдет с кем-либо еще, проверьте пробелы в своих контроллерах или моделях.
Если вы не можете найти, куда отправляются заголовки, попробуйте использовать функцию headers_sent(), проходящую в параметрах, чтобы узнать, куда были отправлены заголовки.
Для этого вы можете опустить закрывающий тег php (?>) Из php файлов, таких как контроллер, модалы