2010-03-08 118 views
6

我将CakePHP与Auth和ACL组件一起使用。我的页面可以加载非注册用户,但如果我尝试以注册用户身份登录,我会在浏览器中获得无限重定向循环。调试浏览器重定向循环

我确定这是某种权限问题,但即使对拥有所有权限的用户也存在问题。防止这种行为的唯一方法是在我的AppController的beforeFilter方法中允许'*'。

调试这类问题的最佳方法是什么?

谢谢!

回答

10

进行调试,尝试在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); 
} 
+1

这正是我所期待的。谢谢! – 2010-03-09 13:06:09

1

我要检查的第一件事是用户控制器的登录方法。如果正确实施,您通常会将所有未经验证/授权的流量路由到登录控制器。但是,如果你没有向公众提供许可,它很可能会导致无限循环。因此,请检查app_controller(或存储Auth/ACL权限的任何位置)并确保Users.login可公开访问。

2

还要确保您检查在你的验证组件在你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/只是为了确定它的设置是否正确。

,我发现另一件事是偶然,beforeFilter()有时敲除验证在你的app_controller设置,所以也许尝试在你的控制器有

parent::beforeFilter(); 

为了确保您的app_controller的beforeFilter()是正在执行。