Cakephp 2安全组件和ajax调用
问题描述:
处理我的ajax调用secuity组件不会像他们应该的那样。Cakephp 2安全组件和ajax调用
如何在cakephp 2.x中处理它?
Appcontroller.php
public function beforeFilter() {
$this->Security->blackHoleCallback = 'blackhole';
if ($this->request->is('ajax')) {
$this->Security->validatePost = false;
}
似乎不工作...
答
您仍然可以使用Cake的形式提供的安全机制的安全Ajax调用。 要做到这一点,渲染一个不可见的窗体并放置输入来存储ajax调用参数。然后,用JavaScript在表单中设置这些参数并通过序列化来完成ajax调用。请记住,如果您启用了CSRF检查(并且每会话一个令牌被禁用),则必须使用新的有效CSRF令牌更新该表单(可以使用$this->request->params['_Token']['key']
在控制器中读取该令牌)。
实施例:
<?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>
为了进一步参考,我们已经创建了一个组件,它允许维持对被dinamically修改的客户机侧的形式启用安全性,并且消除了需要解锁字段或使Ajax时的动作调用。你可以在https://github.com/QTSdev/DynamicSecurity找到它。
组件(和Github页面)已经消失。你有新链接吗? – schnauss 2015-04-06 21:05:37