gpt4 book ai didi

CakePHP 3.7.3 : Use SecurityComponent with Ajax with SPA

转载 作者:行者123 更新时间:2023-12-05 07:26:01 24 4
gpt4 key购买 nike

这是启用 SecurityComponent 的 ajax 请求的经典问题。我主要有一个水疗中心。这是主要问题。

我也在使用 CSRF 组件,它工作正常:

const response = await axios.post("/items/add.json", data, {
headers: {"X-CSRF-Token": "<?= $this->getRequest()->getParam('_csrfToken') ?>"}
});

什么不起作用是为安全组件发送_Token:

{message: "'_Token' was not found in request data.", url: "/.../add.json", code: 400,…}

当然我可以禁用 SecurityComponent。

我的请求不需要表单/表单助手,那么问题是当我不使用传统的基于表单的应用程序时,在这里使用 SecurityComponent 是否有意义。当然,我期望某些操作中的某些帖子字段/值是有道理的,但我不确定如何将其与 SecurityComponent 结合使用。

我想我可以用助手创建一个虚拟表单并从那里提取 token ,但这只生成一次并且我有一个 SPA。

这当然有效:

beforeFilter: $this->getEventManager()->off($this->Security);

最佳答案

我只是提供一个技术性的答案,而不是对使用 SecurityComponent 是否有意义发表意见——安全性不是我的强项。

如果您需要从 SPA 提交许多 AJAX 调用,您能否通过 AJAX 请求生成请求表单,然后从中提取 token ?这听起来可能有点老套,但实际上可以非常巧妙地完成——您提交的每个 AJAX 请求都可以执行您需要它执行的操作,然后返回一个新的 <form>。元素(带有新 token )作为其响应的一部分 - 然后您可以将其隐藏在不可见的地方,覆盖前一个元素并从中检索 token 以供下一次调用。

在管理提交时,我发现处理 token 等的最简单方法是结合 this answer序列化(例如 jQuery 的 serialize() )。这整齐地打包了所有隐藏的表单值。我的(基于 jQuery 的)代码如下所示:

var ele_form = $('#some-form-id');
var ele_csrf = ele_form.find('input[name="_csrfToken"]');
var target_url = ele_form.attr('action'); // form-action is validated, so need to generate this correctly
var csrf_token = ele_csrf.val();
$.ajax({
type: 'POST',
url: target_url,
beforeSend: function(xhr){
xhr.setRequestHeader('X-CSRF-Token', csrf_token);
},
data: ele_form.serialize()
});

如果您想更具体地说明您在 SPA 中发送的请求类型,我们很乐意详细说明该示例。

关于CakePHP 3.7.3 : Use SecurityComponent with Ajax with SPA,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54562777/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com