最终找到了解决方案:
如果有人遇到这个问题,请将其放入您的前置过滤器中。
$this->Security->unlockedActions = array('givestar');
将libs更新为Cake 2.3
问题:
我正在努力解决我的ajax电话问题上的SECURITY组件问题。
var id = 1;
$.ajax({
type: "post",
url: "/messages/givestar/",
data: {"id" : id},
dataType: "json"
});
我只是尝试发送控制器的ID来更新id = id
的消息但是安全组件在我所有的ajax调用中都是Blackholing。
任何人都知道我如何才能使安全组件激活?
谢谢!
你太棒了!
- 汤姆
建议????
UPDATE2 经过一些测试后,我从黑洞得到了AUTH错误。
From Book:
‘auth’ Indicates a form validation error, or a controller/action mismatch error.
我已经仔细检查了所有ACO节点,它们很好。我在我的ajax调用中依赖于安全组件的FORM VALIDATION ERROR。
更新
AppController.php
public $components = array(
'Acl',
'Auth',
'Session',
'Security',
'Cookie'
);
public function beforeFilter() {
$this->Security->blackHoleCallback = 'blackhole';
}
public function blackhole($type) {
$this->Session->setFlash(__('ERROR: %s',$type), 'flash/error');
}
MessagesController.php
public $components = array('RequestHandler');
public function beforeFilter() {
parent::beforeFilter();
}
public function givestar() {
$this->autoRender = false;
if ($this->request->is('ajax')) {
echo 'Working';
}
return;
}
答案 0 :(得分:7)
在beforefilter中:
$this->Security->unlockedActions = array('givestar');
答案 1 :(得分:2)
SecurityComponent第396行:
if (!isset($controller->request->data['_Token'])) {
if (!$this->blackHole($controller, 'auth')) {
return null;
}
}
所以我想如果您想保护此操作,您必须使用其他生成的'_Token'键发送数据。此密钥是使用Form-> secure($ fields)方法生成的(acctualy方法生成具有适当值的隐藏输入)。