首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >3.6版本post请求中的CSRF令牌不匹配

3.6版本post请求中的CSRF令牌不匹配
EN

Stack Overflow用户
提问于 2018-08-19 10:22:43
回答 4查看 25.9K关注 0票数 4

我有两个不同的cakephp应用程序。一个是3.5版,另一个是3.6版。

当我使用并构建3.5app时,我没有CSRF matching in post request.的问题,但是现在我正在使用3.6时,它给了我CSRF令牌的错误。

尽管在两个应用程序的AppController中,CSRF组件都是禁用的。

//$this->loadComponent('Csrf');

我使用以下简单的post请求:

代码语言:javascript
运行
复制
$.ajax({
        type: "POST",
        url: "../user/my_action",
        dataType: 'json',
        success: function (data) {
            set_data(data.response);
        }
    });

我遗漏了什么?或者我做错了什么配置?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-19 10:58:32

最新的3.6应用程序模板现在默认使用CSRF中间件,请参阅您的应用程序src/Application.php文件。不幸的是,这一变化并没有被正确地记录下来,并意外地打击了人们。

理想情况下,您不禁用它,而是将正确的CSRF令牌与AJAX请求一起传递,您可以轻松地从视图模板中的request对象获得令牌,例如在布局中使其全局可用:

代码语言:javascript
运行
复制
<script>
var csrfToken = <?= json_encode($this->request->getParam('_csrfToken')) ?>;
// ...
</script>

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

代码语言:javascript
运行
复制
$.ajax({
    headers: {
        'X-CSRF-Token': csrfToken
    },
    // ...
});

另请参阅

票数 21
EN

Stack Overflow用户

发布于 2018-09-28 03:27:47

在$.ajax()函数调用中添加以下代码:

代码语言:javascript
运行
复制
beforeSend: function (xhr) { // Add this line
        xhr.setRequestHeader('X-CSRF-Token', $('[name="_csrfToken"]').val());
 },  // Add this line
票数 4
EN

Stack Overflow用户

发布于 2019-11-01 12:02:58

对于CakePHP 3.8,这对我来说是有效的。在config\routes.php中,请按如下方式注释该行:

代码语言:javascript
运行
复制
//$routes->applyMiddleware('csrf');
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51916680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档