我有两个不同的cakephp应用程序。一个是3.5版,另一个是3.6版。
当我使用并构建3.5app时,我没有CSRF matching in post request.
的问题,但是现在我正在使用3.6时,它给了我CSRF令牌的错误。
尽管在两个应用程序的AppController
中,CSRF组件都是禁用的。
//$this->loadComponent('Csrf');
我使用以下简单的post请求:
$.ajax({
type: "POST",
url: "../user/my_action",
dataType: 'json',
success: function (data) {
set_data(data.response);
}
});
我遗漏了什么?或者我做错了什么配置?
发布于 2018-08-19 10:58:32
最新的3.6应用程序模板现在默认使用CSRF中间件,请参阅您的应用程序src/Application.php
文件。不幸的是,这一变化并没有被正确地记录下来,并意外地打击了人们。
理想情况下,您不禁用它,而是将正确的CSRF令牌与AJAX请求一起传递,您可以轻松地从视图模板中的request对象获得令牌,例如在布局中使其全局可用:
<script>
var csrfToken = <?= json_encode($this->request->getParam('_csrfToken')) ?>;
// ...
</script>
然后,您可以轻松地在AJAX请求中使用它:
$.ajax({
headers: {
'X-CSRF-Token': csrfToken
},
// ...
});
另请参阅
发布于 2018-09-28 03:27:47
在$.ajax()函数调用中添加以下代码:
beforeSend: function (xhr) { // Add this line
xhr.setRequestHeader('X-CSRF-Token', $('[name="_csrfToken"]').val());
}, // Add this line
发布于 2019-11-01 12:02:58
对于CakePHP 3.8,这对我来说是有效的。在config\routes.php中,请按如下方式注释该行:
//$routes->applyMiddleware('csrf');
https://stackoverflow.com/questions/51916680
复制相似问题