Отладка цикла перенаправления браузера - PullRequest
6 голосов
/ 09 марта 2010

Я использую CakePHP с компонентами Auth и ACL.Моя страница загружается нормально для незарегистрированных пользователей, но если я пытаюсь войти в систему как зарегистрированный пользователь, я получаю бесконечный цикл перенаправления в браузере.

Я уверен, что это какая-то проблема с разрешениями, нопроблема существует даже для пользователей, у которых есть разрешения на все.Единственный способ предотвратить такое поведение - разрешить '*' в методе beforeFilter моего AppController.

Каков наилучший способ устранения проблемы такого рода?

Спасибо!

Ответы [ 3 ]

10 голосов
/ 09 марта 2010

В целях отладки попробуйте вставить это первое в ваш 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);
}
2 голосов
/ 09 марта 2010

Также убедитесь, что вы проверили правильность настроек вашего компонента Auth в app_controller.

http://book.cakephp.org/1.3/en/The-Manual/Core-Components/Authentication.html#setting-auth-component-variables

Я склонен явно определять их все. Может быть, проверить что-то вроде этого, http://www.webdevelopment2.com/cakephp-auth-component-tutorial-1/ Просто чтобы убедиться, что все настроено правильно.

Другая вещь, которую я обнаружил, - иногда, до того, какFilter () может иногда выбить настройку Auth в вашем app_controller, так что, возможно, попробуйте в ваших контроллерах, имеющих

parent::beforeFilter();

Чтобы убедиться, что ваш app_controller beforeFilter () выполняется.

1 голос
/ 09 марта 2010

Первым делом я проверю метод входа в систему контроллера Users. Если все реализовано правильно, вы, как правило, будете направлять весь неподтвержденный / авторизованный трафик на контроллер входа в систему. Однако, если вы не дали разрешение общественности, это, скорее всего, приведет к бесконечному циклу. Поэтому проверьте app_controller (или где вы храните разрешения Auth / ACL) и убедитесь, что Users.login общедоступен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...