Я использую CakePHP с компонентами ACL и Автором. Мои загрузки страницы, прекрасные для незарегистрированных пользователей, но если я пытаюсь войти в систему как зарегистрированный пользователь, я получаю бесконечный цикл перенаправления в браузере.
Я уверен, что это - своего рода проблема полномочий, но проблема существует даже для пользователей, у которых есть полномочия для всего. Единственный способ предотвратить это поведение состоит в том, чтобы позволить '*' в beforeFilter методе моего AppController.
Что лучший способ состоит в том, чтобы отладить этот вид проблемы?
Спасибо!
Для целей отладки попробуйте сначала вставить это в свой AppController :: beforeFilter ()
:
$this->log("Here: {$this->here}, coming from: " . $this->referer(), LOG_DEBUG);
Это будет записывать в войдите в систему /app/tmp/logs/debug.log
. Вы также можете объединить это с переопределением метода перенаправления в AppController
:
function redirect($url, $status = null, $exit = true) {
$trace = debug_backtrace();
$this->log("Redirecting to: " . Router::url($url) . ", initiated in {$trace[1]['file']} on line {$trace[1]['line']}", LOG_DEBUG);
parent::redirect($url, $status, $exit);
}
Первое, что я хотел бы проверить, это метод входа в систему контроллера Users. При правильной реализации вы обычно будете направлять весь неподтвержденный / авторизованный трафик на контроллер входа в систему. Однако, если вы не предоставили публичное разрешение, это, скорее всего, приведет к бесконечному циклу. Поэтому проверьте app_controller (или где вы храните разрешения Auth / ACL) и убедитесь, что Users.login общедоступен.
Также убедитесь, что вы проверяете правильность настроек вашего компонента Auth в app_controller.
Я обычно определяю их все явно. Может быть, проверьте что-нибудь вроде этого, http://www.webdevelopment2.com/cakephp-auth-component-tutorial-1/ Просто чтобы убедиться, что все настроено правильно.
Еще я обнаружил, что иногда beforeFilter () может иногда сбивать настройку Auth в вашем app_controller, поэтому, возможно, попробуйте в ваших контроллерах, имеющих
parent::beforeFilter();
, чтобы убедиться, что beforeFilter () вашего app_controller выполняется.