Cakephp 2安全组件和ajax调用

Tom*_*Tom 5 security jquery cakephp-2.1

处理我的ajax调用中的安全组件不会像他们应该的那样.

你如何在cakephp 2.x中处理它?

Appcontroller.php

public function beforeFilter() {
        $this->Security->blackHoleCallback = 'blackhole';
        if ($this->request->is('ajax')) {
            $this->Security->validatePost = false;
        }
Run Code Online (Sandbox Code Playgroud)

似乎不起作用......

Tar*_*raz 3

您仍然可以使用 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>
Run Code Online (Sandbox Code Playgroud)

为了进一步参考,我们创建了一个组件,允许维护动态修改的客户端表单上启用的安全性,并且在进行 ajax 调用时无需解锁字段或操作。您可以在https://github.com/QTSdev/DynamicSecurity找到它。