Функция входа в систему записывает пару переменных сеанса после успешной аутентификации, а затем перенаправляет на себя для печати приветственного сообщения (представление изменяется в зависимости от статуса аутентификации).Это прекрасно работает с debug> = 0. Теперь, когда я добавляю CakeLog :: write () к той же функции входа в систему, он перестает работать с debug = 0 и отображается пустая страница.Он продолжает работать с отладкой> 0.
Согласно журналам Apache, белая страница является результатом ошибки 500 после запроса POST.
Что делает CakeLog :: write ()кроме записи в файл журнала?
Участвуют компоненты 'Session', 'Security' и 'Auth', но я не вызываю метод requirePost.
CakeLog :: write ()возвращает true в случае успеха, но перехват кода возврата не меняет проблему того, что дальнейшее выполнение кода прерывается.Я должен перезагрузить белую страницу, чтобы продолжить (т.е. заменить POST запросом GET).
Вот логин users_controller:
function login(){
[if form contains data do some LDAP checking...]
if($permission>0){
$this->Session->write('logname', $samaccountname);
$this->Session->write('logperm', $permission);
[...]
// Here is where it blocks. Without this line debug=0 is okay
$result = CakeLog::write('log', $samaccountname);
$this->Auth->login();
// the Auth redirect target is set in the app_controller to allow jumping right
// to the originally intended URL, usually it redirects to itself
$this->redirect($this->Auth->redirect());
}
}
А это - beforeFilter для app_controller:
function beforeFilter(){
$this->Security->blackHoleCallback = 'showErrorPage';
$this->Security->requireAuth();
$this->Security->requireSecure();
if($this->Session->read('logperm') < 1 && $this->here != '/users/login'){
$this->Auth->redirect($this->here); // store chosen URL
$this->redirect('/users/login');
}
if($this->Session->read('logperm') == 3)
$this->Auth->allow('*');
elseif[...]
}