处理我的ajax调用上的安全组件并不是他们应该做的。
你如何在cakephp 2.x中处理它?</ p>
Appcontroller.php
public function beforeFilter() {
$this->Security->blackHoleCallback = 'blackhole';
if ($this->request->is('ajax')) {
$this->Security->validatePost = false;
}
似乎不起作用......
答案 0 :(得分:3)
您仍然可以使用Cake提供的表格安全机制进行安全的ajax调用。
为此,渲染不可见的表单并放置输入以存储ajax调用参数。然后,使用Javascript在表单中设置这些参数,并通过序列化来执行ajax调用。请记住,如果启用了CSRF检查(并且每个会话禁用一个令牌),则必须使用新的有效CSRF令牌更新表单(您可以使用$this->request->params['_Token']['key']
在控制器中读取它)。 / p>
示例:
<?php
echo $this->Form->create('AjaxForm');
echo $this->Form->hidden('value');
echo $this->Form->end();
?>
<script>
function makeAjaxCall() {
$.post(
ajaxUrl,
$('#AjaxForm').serialize(),
function(data) {
$('#AjaxForm [name="data[_Token][key]"]').val(data.newCsrfToken)
}
);
};
</script>
为了进一步参考,我们创建了一个组件,该组件允许在客户端表单上维护启用安全性,并且在进行ajax调用时无需解锁字段或操作。您可以在https://github.com/QTSdev/DynamicSecurity找到它。