CakePHP 3.7.3:将 SecurityComponent 与 Ajax 和 SPA 结合使用

2024-02-11

这是启用 SecurityComponent 的 ajax 请求的一个典型问题。 我主要是做SPA。这是主要问题。

我还使用了 CSRF 组件,它工作得很好:

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

不起作用的是发送安全组件的令牌:

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

当然,我可以禁用安全组件。

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

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

这当然有效:

过滤前:$this->getEventManager()->off($this->Security);


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

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

当谈到管理提交时,我发现处理令牌等最简单的方法是结合这个答案 https://stackoverflow.com/a/45163510/356256序列化(例如 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 中发送的请求类型,我们很乐意详细说明该示例。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CakePHP 3.7.3:将 SecurityComponent 与 Ajax 和 SPA 结合使用 的相关文章

  • CakePHP 2.0 中的错误处理。转义 viewVars [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我在 Cake 2 中遇到了一个奇怪
  • cakephp 3 中的授权和 ACL

    我搜索了文档 但没有找到有关 cakephp 3 中 ACL 实现的任何信息 如何在 cakephp 3 中使用 ACL 实现授权 ACL 不像 CakePHP 2 那样内置在 CakePHP 3 中 它现在作为单独的插件提供 引用自htt
  • CakePHP 3.0:如何在重复键更新时进行插入?

    我有一个数组 articles像这样 int 0 gt id gt 940039 xe dsca gt P2768G 1 xe citg gt 1F0200 xe cuni gt stk xe seak gt P2768G 1 xe sea
  • 如何获取 CakePHP 3.0 中最后一个插入 ID?

    使用 CakePHP 3 0 beta 似乎是一个简单的问题 但我搜索了文档但找不到任何东西 使用 this gt Model gt save 插入新记录后 我想获取新创建记录的 auto increment 主键 ID 使用 Cake 2
  • 锚标记内的 CakePHP Span 标记

    我试图让 CakePHP 输出一个如下所示的链接 a href foo bar class some other classes span class icon new span FooBar a 所以我在我看来使用以下代码
  • 将子域重定向到 CakePHP 操作

    背景 我有一个 CakePHP 应用程序 位于 m 我想写一个根级别的 htaccess文件 它将重定向网站的 子域 作为操作的参数 例如 我想编写一个重写规则 这将导致像这样的重定向 http mysite myserver com ht
  • CSS 不适用于 CakePHP 应用程序

    我在使用 CakePHP 时遇到问题 找不到 CSS 当我在浏览器中查看源代码时 我可以在头部看到蛋糕通用 CSS 链接 但是当我点击它查看实际的源代码时 我收到了 404 未找到错误 Update 我已按照此处的说明进行操作 http b
  • CakePHP 3.X 中的自定义 404 页面

    我想为生产环境中出现的所有错误创建一个自定义 404 页面 例如 如果我收到缺少控制器或视图错误 那么它将重定向到http example com 404 html 另外在某些情况下我会故意重定向它http example com 404
  • 如何安装 Miles J 的 cakephp 论坛插件?

    我很确定这是一个蛋糕 1 3 问题 该插件与 2 0 不兼容 我正在尝试为论坛安装 cakephp 的 Miles J 插件 可以在这里找到 http milesj me code cakephp forum http milesj me
  • cakephp 3.0 如何使用值而不是 id 填充选择字段

    我一直在寻找以前的答案 但我找到的答案与旧的 cakephp 版本有关 我有两个表 杂志 和 问题 其中存在关系 问题 属于 杂志 问题表如下所示 public function initialize array config this g
  • CakePHP Xml 实用程序库触发 DOMDocument 警告

    我正在使用 CakePHP 在视图中生成 XMLXML核心库 http book cakephp org 2 0 en core utility libraries xml html xml Xml build data array ret
  • CakePHP 查找 - 按字符串到整数排序?

    我想使用 CakePHP 从数据库中提取照片数组 按照片标题排序 0 1 2 3 我的查询当前看起来像 ss photos this gt Asset gt find all array conditions gt array kind g
  • CakePHP PaginationRecallComponent,严格 (2048):PaginationRecallComponent::initialize() 声明

    我尝试插入分页调用组件 http bakery cakephp org articles Zaphod 2012 03 27 paginationrecall for cakephp 2 x http bakery cakephp org
  • cakephp auth->admin 的登录重定向

    我对 cakePHP 相当陌生 并且已经阅读了蛋糕网站上的所有教程 我正在使用 cake 2 1 构建一个小型示例应用程序 但遇到了问题 基本上 我希望管理员用户在登录时重定向到与普通用户重定向到的页面不同的页面 我确信有一个简单的方法可以
  • 我可以在类变量中添加没有指定值的 PHP 数组键吗?

    我目前正在努力通过IBM 关于 CakePHP 的教程 http www 128 ibm com developerworks edu os dw os php cake1 html 有一次我遇到了这段代码
  • 包括 PHPUnit 在内的麻烦

    我想开始为我的代码编写测试 因此我使用以下命令安装了最新的 PHPUnit wget http pear phpunit de get phpunit phar chmod x phpunit phar mv phpunit phar us
  • CakePHP3 中令人困惑的验证与应用程序规则

    有关验证的多个问题可能属于同一类 因为它们都在解决 CakePHP 3 中的新验证概念 我已阅读章节 1 http book cakephp org 3 0 en orm validation html 2 http book cakeph
  • 何时在 CakePHP 中进行清理

    我读了食谱 第 4 2 节 如果您使用 CakePHP 的 ORM 方法 例如 find 和 save 和正确的数组表示法 即 array field gt value 而不是原始 SQL CakePHP 已经可以保护您免受 SQL 注入
  • 如何在 nginx 反向代理后面安全地检测 CakePHP 中的 SSL?

    CakePHP 我见过的所有版本 检查 SERVER HTTPS 查看请求是否是通过 HTTPS 而不是普通 HTTP 发出的 我使用 nginx 作为负载均衡器 后面是 Apache 应用程序服务器 由于 SSL 连接在负载均衡器处终止
  • 如何使用多个Auth组件?

    我使用用户模型将身份验证组件配置为 管理页面 但现在 我还想为客户端创建 配置身份验证 我尝试 重写 inialize This is in my ClientsController php public function initiali

随机推荐

  • select2 动态改变项目

    我有两个链接的选择 第一个选择的每个值决定哪些项目将显示在第二个选择中 第二个选择的值存储在二维数组中 id 1 text a id 2 text b id 1a text aa id 1b text ba 第一个选择值确定用于填充第二个选
  • LDA Mallet 调用进程错误

    我正在尝试实现以下代码 import os os environ update MALLET HOME r c mallet 2 0 8 mallet path C mallet 2 0 8 bin mallet ldamallet gen
  • seasonal_decompose:操作数无法与系列上的形状一起广播

    我知道关于这个话题有很多问题 但没有一个能帮助我解决这个问题 我真的很坚持这个 用一个简单的系列 0 2016 01 31 266 2016 02 29 235 2016 03 31 347 2016 04 30 514 2016 05 3
  • 带有外部图像的 box2d-js 元素

    到目前为止 在各种 box2d js 实现的示例中 我只能找到形状 球 盒子 等 中定义的元素 有没有办法创建由图像定义的元素 例如一块巨石 您可以使用b2PolyDef and b2PolyShape对象来创建多边形 本文档 http w
  • Haskell - 简单构造函数比较(?)函数

    在我的项目中 我创建了一种数据类型 它可以保存几种类型的值之一 data PhpValue VoidValue IntValue Integer BoolValue Bool 我现在想做的是有一种简单的方法来检查两个值是否PhpValue类
  • Google 身份验证器作为公共服务提供吗?

    是否有公共 API 可以使用 双因素身份验证 在自运行 例如 LAMP 堆栈 Web 应用程序上 The project http code google com p google authenticator 是开源的 我没用过 但它使用记
  • vertx 应用程序中的 CORS 问题无法正常工作

    我的 Vertx 服务器驻留在服务器 A 中 客户端驻留在服务器 B 中 当我尝试访问 vertx 服务器时 弹出 CORS 错误 我添加了一些服务器端代码来处理 CORS 问题 但它不起作用 我们是否需要在客户端添加一些标头 我在这里缺少
  • Yii:需要 .php 文件

    我用 Yii 开发一个项目 我需要一个普通的 php 文件 不是组件 不是类 只是 PHP 函数定义的常规序列 在 Yii 框架下执行此操作的正确方法是什么 我应该使用普通的 require once 吗 require once Yii
  • 如何从雅虎财经下载仅限 100 行的数据

    所以我正在做这个项目 我必须从雅虎财经下载历史股票数据 得到了这个代码 它工作正常 但最多只能下载 100 行 我尝试在网上扫描答案或不同的代码 这个只是从 Excel 中录制的宏 但我在 YouTube 上看到了一些使用他的解决方案的教程
  • ...联合问题中不允许使用构造函数

    我迫切需要找到以下问题的解决方案 namespace test template
  • C#:相当于 python try/catch/else 块

    在Python中 有这样有用的异常处理代码 try Code that could raise an exception except Exception Exception handling else Code to execute if
  • Cuda C 上任意大小的矩阵转置(具有共享内存)

    我无法找到在 CUDA C 中使用共享内存转置非方矩阵的方法 我是 CUDA C 和 C 的新手 In 这篇博文 https developer nvidia com blog efficient matrix transpose cuda
  • Jquery ui 自动完成 - 多个来源

    对于 1 个源 这是 ajax 调用后的正确代码 url links2 xml 我希望源是多个 xml 文件 如何包含额外的路径 Thanks 首先 docs http docs jquery com UI API 1 8 Autocomp
  • Angular $q.when 是如何工作的?

    有人可以解释一下怎么做吗 q when在 AngularJS 中工作 我正在尝试分析如何 http工作并发现了这个 var promise q when config 这是来自 Chrome 控制台的配置对象 Object transfor
  • 如果我在 Python 3 中将文件截断为零,我还需要寻找零位置吗?

    根据来自的回答这个问题 https stackoverflow com questions 8945370 garbage in file after truncate0 in python呼叫truncate实际上并没有移动文件的位置 所
  • 安装上的自动对焦输入 (Vue) - iOS

    我想在 Vue 组件出现时触发输入框聚焦 从而弹出键盘 它不起作用iOS 我尝试使用 Vue 的示例指令 here https v2 vuejs org v2 guide custom directive html 和 HTML5autoF
  • 如何在 CakePHP 中执行自定义查询

    我目前正在尝试在 CakePHP 框架中执行自定义查询 这意味着我不想使用 CakePHP 语法 而是想执行普通的 SQL 查询 例如SELECT FROM post ORDER BY id desc 我不知道该怎么做 我阅读了类似问题的几
  • 如何以编程方式在RelativeLayout中布局视图?

    我试图以编程方式 而不是通过 XML 声明方式 实现以下目标
  • 构建项目时获取源和目标必须不同的错误

    我在构建项目时收到此错误 尝试在 android studio 中添加新库 有没有人有一个想法 基本上我想在这里创建一个新的图书馆 尝试过的选项 手动删除构建 使缓存无效 重新启动 Gradle 清理构建缓存 构建 gt 清理项目 但构建失
  • CakePHP 3.7.3:将 SecurityComponent 与 Ajax 和 SPA 结合使用

    这是启用 SecurityComponent 的 ajax 请求的一个典型问题 我主要是做SPA 这是主要问题 我还使用了 CSRF 组件 它工作得很好 const response await axios post items add j