这 是 启用 了 SecurityComponent 的 ajax 请求 的 一 个 典型 问题 。 我 主要 有 一 个 SPA 。 这 是 主要 问题 。
我 还 使用 了 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 是否 有 意义 。 当然 , 我 希望 在 某些 操作 中 使用 某些 post 字段/值 是 有 意义 的 , 但 我 不 确定 如何 将 其 与 SecurityComponent 结合 使用 。
我 想 我 可以 用 helper 创建 一 个 虚拟 表单 , 并 从中 提取 令牌 , 但 这 只 生成 一 次 , 而且 我 有 一 个 SPA 。
这 当然 行得通 :
过滤 器 之前 :x1月 1 日
1条答案
按热度按时间gt0wga4j1#
我 只是 提供 一 个 技术 性 的 答案 , 而 不是 对 使用 SecurityComponent 是否 有 意义 发表 意见 - 安全 性 不是 我 的 强项 。
如果 您 需要 从 SPA 提交 许多 AJAX 调用 , 您 是否 可以 通过 AJAX 请求 生成 请求 表单 , 然后 从中 提取 令牌 ? 这 听 起来 可能 有点 笨拙 , 但 实际 上 可以 非常 简洁 地 完成 - 您 提交 的 每个 AJAX 请求 都 可以 完成 您 需要 它 做 的 事情 。然后 返回 一 个 新 的
<form>
元素 ( 带有 新 的 令牌 ) 作为 其 响应 的 一 部分 - 然后 可以 将 其 隐藏 在 不可 见 的 地方 , 覆盖 前 一 个 元素 , 并 从 中 检索 令牌 以 用于 下 一 次 调用 。当 涉及 到 管理 提交 时 , 我 发现 处理 token 等 的 最 简单 的 方法 是 将 this answer 与 序列 化 结合 起来 ( 例如 jQuery 的
serialize()
) 。 这 将 把 所有 隐藏 的 表单 值 整齐 地 打包 起来 。 我 的 ( 基于 jQuery 的 ) 代码 如下 所 示 :中 的 每 一 个
如果 您 想 更 具体 地 了解 在 SPA 中 发送 的 请求 类型 , 那么 很 乐意 详细 介绍 该 示例 。