CakePHP ACL中的拒绝导致内存耗尽
运行CakePHP 2.2,并且有一个组在控制器上有一个拒绝,然后在其他几个控制器上有一个允许。如果我以该组的用户身份登录并尝试访问我没有明确权限访问的控制器,则会出现以下错误: 致命错误:允许的内存大小134217728字节已用尽(已尝试 在内存中分配32个字节) /var/www/project/lib/Cake/Network/CakeResponse.php,第672行 而且: 致命错误:允许的内存大小134217728字节已用尽(已尝试 在内存中分配80个字节) /var/www/project/lib/Cake/Event/CakeEventManager.php,第155行 这仅在用户无权访问控制器时发生。你知道为什么会这样吗?AppController配置为:CakePHP ACL中的拒绝导致内存耗尽,cakephp,cakephp-2.0,acl,Cakephp,Cakephp 2.0,Acl,运行CakePHP 2.2,并且有一个组在控制器上有一个拒绝,然后在其他几个控制器上有一个允许。如果我以该组的用户身份登录并尝试访问我没有明确权限访问的控制器,则会出现以下错误: 致命错误:允许的内存大小134217728字节已用尽(已尝试 在内存中分配32个字节) /var/www/project/lib/Cake/Network/CakeResponse.php,第672行 而且: 致命错误:允许的内存大小134217728字节已用尽(已尝试 在内存中分配80个字节) /var/www/pr
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,它就会超时。有件傻事发生了
更新
当我跟踪mysql查询日志时,我可以看到生成此错误的请求反复尝试相同的3个查询。已解决。需要在AppController中设置“UnauthorizedDirect”=>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
));
我打赌会有一个与ajax相关的重定向循环。不,没有ajax重定向循环。在返回内存耗尽错误之前,我可以看到请求处于挂起状态。