【问题标题】:How to add Csfr token before each ajax call dynamically in CakePHP如何在 CakePHP 中的每个 ajax 调用之前动态添加 Csrf 令牌
【发布时间】:2020-08-19 21:29:24
【问题描述】:

我正在使用 CakePHP 3.6。我有一个函数将使用 AJAX 调用返回一些数据。将从我网站的任何页面调用此函数。就像一个按钮将在那里,单击该按钮时,模态将带有一些数据。这些数据将来自 AJAX 调用。所以现在我面临的问题是 Csrf 令牌。如果我从可用表单的页面单击,则此 AJAX 调用工作完美,因为该表单有可用的 Csrf 令牌。但是当我尝试从没有可用表单的页面单击时,AJAX 会给出 Csrf 错误。因为该页面没有添加 Csrf。

这就是我的按钮单击和 Ajax 调用函数的样子

$("#td-apt").on('click', function() {
    getModalData();
    $("#data-modal").modal('toggle');
});

function getModalData () {
    $.ajax({
        type: "POST",
        url: "/function/Data",
        headers: {
            'X-CSRF-Token': $('input[name="_csrfToken"]').val()
        },
        dataType: "json",
        success: function(data) {
            console.log('success')
        },
        error: function() {
            alert('Error');
        }
    });
}

因此,在调用此 AJAX url 之前,每次都可以生成 Csrf 令牌。或任何其他方式来做到这一点。谢谢

【问题讨论】:

    标签: ajax cakephp csrf


    【解决方案1】:

    您可以从视图模板中的请求对象获取令牌,例如在布局中使其全局可用:

    <script>
    var csrfToken = <?= json_encode($this->request->getParam('_csrfToken')) ?>;
    // ...
    </script>
    

    然后您可以轻松地在您的 AJAX 请求中使用它:

    $.ajax({
        headers: {
            'X-CSRF-Token': csrfToken
        },
        // ...
    });
    

    或者,如果你手头已经有一些 JS cookie 解析器,你可以从名为 csrfToken 的 cookie 中获取它。

    另见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-09-19
      • 2017-11-11
      • 2019-12-03
      • 1970-01-01
      • 1970-01-01
      • 2018-12-31
      • 1970-01-01
      相关资源
      最近更新 更多