0

运行 CakePHP 2.2 并有一个在控制器上拒绝的组,然后在其他几个控制器上允许。如果我以该组的用户身份登录并尝试访问我没有明确权限的控制器,则会收到以下错误:

致命错误:第 672 行 /var/www/project/lib/Cake/Network/CakeResponse.php 中允许的内存大小为 134217728 字节已用尽(尝试分配 32 字节)

并且:

致命错误:第 155 行 /var/www/project/lib/Cake/Event/CakeEventManager.php 中允许的内存大小为 134217728 字节已用尽(尝试分配 80 字节)

这仅在用户无权访问控制器时发生。任何想法为什么会发生这种情况?AppController 配置为:

public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers'),
        ),
        'Form' => array(
            'userModel' => 'User',
            'fields' => array(
                'username' => 'username',
                'password' => 'password'
            )
        ),
        'loginAction' => array(
            'controller' => 'users',
            'action' => 'login',
        ),
        'loginRedirect' => '/users/dashboard', //'/admin/customers/index',//'/admin/tread_designs', // '/shopfloor/build/app.html',
        'logoutRedirect' => '/users/login', //'/shopfloor/build/app.html'
    )
);

和之前过滤器:

public function beforeFilter() {
    parent::beforeFilter();

    if($this->RequestHandler->responseType() == 'json'){
        $this->RequestHandler->setContent('json', 'application/json' );
    }

    $this->Auth->ajaxLogin = '/users/session_expired';
    $this->Auth->loginAction = array('controller' => 'users', 'action' => 'login');
    $this->Auth->logoutRedirect = array('controller' => 'users', 'action' => 'login');
}

对此感到困惑,感谢您的帮助。此外,如果我将内存限制提高到 1024MB,它就会超时。有什么蠢事发生了。

更新 当我tail -f mysql查询日志时,我可以看到生成此错误的请求一遍又一遍地尝试相同的3个查询。

4

1 回答 1

0

解决了。需要在 AppController 中设置 'unauthorizedRedirect' => false

例子:

    public $components = array(
    'Acl',
    'Auth' => array(
        'authorize' => array(
            'Actions' => array('actionPath' => 'controllers'),
        ),
        'Form' => array(
            'userModel' => 'User',
            'fields' => array(
                'username' => 'username',
                'password' => 'password'
            )
        ),
        'loginAction' => array(
            'controller' => 'users',
            'action' => 'login',
        ),
        'loginRedirect' => '/users/dashboard', 
        'logoutRedirect' => '/users/login', 
        'unauthorizedRedirect' => false 
    ));
于 2013-03-20T19:30:11.810 回答