Cakephp 2 ACL ERR_TOO_MANY_REDIRECTS

时间:2013-01-28 11:53:49

标签: php cakephp cakephp-2.0 acl

我正在尝试实现此处的ACL教程: http://book.cakephp.org/2.0/en/tutorials-and-examples/blog-auth-example/auth.html

我按照所有说明操作,但是当我尝试转到 [my_site] / users / add ERR_TOO_MANY_REDIRECTS错误时。

我在Cakephp网站上找到了这个:

  

例如,当我们有一个接收数据的元素时会发生这种情况   从控制器的方法,以及该方法的实现   要求进行登录会创建一个无限循环   最终会导致浏览器拒绝重定向

他们建议将此作为修复:

function  beforeFilter ()  { 
 $ this -> Auth -> allow ( 'CONTROLLER_NAME' ); 
}

这似乎不起作用。

如果我从这更改AppController:

public function beforeFilter() {
    $this->Auth->allow('index', 'view', 'login', 'add');
}

为:

public function beforeFilter() {
    $this->Auth->allow('*');
}

我不再收到错误,但会被重定向到 [my_site] / users / login

关于我无法查看用户添加页面的错误建议? TIA!

UserController中:

public function beforeFilter() {
        parent::beforeFilter();
        $this->Auth->allow('add');
    }

登录功能(UsersController):

Public function login() {
    if ($this->request->is('post')) {
        if ($this->Auth->login()) {
            $this->redirect($this->Auth->redirect());
        } else {
            $this->Session->setFlash(__('Invalid username or password, try again'));
        }
    }
}

Auth Component Loader:

public $components = array(
        'Session',
        'RequestHandler',
        'Auth' => array(
            'loginRedirect' => array('controller' => 'projects', 'action' => 'index'),
            'logoutRedirect' => array('controller' => 'pages', 'action' => 'display', 'home')
        )
    );

3 个答案:

答案 0 :(得分:1)

您获得的错误与ACL无关,但是Auth组件拒绝访问您尝试重定向用户的UsersController添加和登录功能。通过在add(而不是login)中添加此行,确保UsersControllerAppController功能是公开的:

public function beforeFilter() {
    $this->Auth->allow(array('add', 'login'));
}

您现在遇到的循环是因为add和login函数不是公共的,因此循环看起来像:add -> Unauthorized -> login -> Unauthorized -> login ......等等。

答案 1 :(得分:0)

请将beforeFilter()的{​​{1}}更改为:

Auth->allow('_CONTROLLER_NAME')

希望对你有用!

答案 2 :(得分:0)

我终于设法通过帮助Brian解决了这个问题:

  

你有requestAction()代码吗?如果是这样,请尝试在

中添加此内容
AppController::beforeFilter() 

if (isset($this->params['requested'])) $this->Auth->allow($this->action);