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 Facebook 集成与 CakePHP-Facebook-Plugin 的注销问题

    我正在寻找一种方法CakePHP Facebook 插件 https github com webtechnick CakePHP Facebook Plugin让用户退出我的应用程序 但不让他们退出他们自己的 Facebook 如果我调用
  • 将子域重定向到 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
  • 如何将序列化的 JSON 视图数据输出为对象数组,而不是包装在外部对象中?

    我正在将 CakePHP 数组的返回值转换为 JSON 目前如下 platformusers id 1 name user1 id 3 name user3 我希望它是这样的 id 1 name user1 id 3 name user3
  • cakephp 3.0 如何使用值而不是 id 填充选择字段

    我一直在寻找以前的答案 但我找到的答案与旧的 cakephp 版本有关 我有两个表 杂志 和 问题 其中存在关系 问题 属于 杂志 问题表如下所示 public function initialize array config this g
  • CakePHP - 选择性 SSL

    如何对网站的某些部分强制使用 HTTPS 例如登录页面或注册页面 并使用 HTTP 来完成网站的其余部分 我最喜欢的强制转换为 https 的方法是将其作为 php 脚本中的第一件事 它可以在 Joomla 中运行 也可以在 CakePHP
  • cakephp 1.1 与 php 5.3

    我刚刚从 php 5 1 升级到 5 3 之前在我的服务器上使用 cakephp 1 1 自从升级 或者可能更早 我不确定 以来 我收到以下错误 任何人都可以透露一些信息 Deprecated Assigning the return va
  • 自定义查找器与关联定义中的匹配?

    我有两个模型 联系人和具有BelongsToMany 关联的组 我只想获取联系人可以访问的组 为此 我有一个自定义查找器 public function findAccessible Query query array options re
  • 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 构建一个小型示例应用程序 但遇到了问题 基本上 我希望管理员用户在登录时重定向到与普通用户重定向到的页面不同的页面 我确信有一个简单的方法可以
  • CakePHP 中的 hasMan 简化为 hasOne

    基本上我在 CakePHP 中有以下模型 User id username Photo id user id path 我已经建立了以下关系 用户有很多照片 在一个屏幕上 我想列出用户 并在每个用户旁边显示随机照片 我尝试建立以下关系 用户
  • 为什么当尝试使用 $this->data 访问 CakePHP 时,密码字段为空?

    我正在实现一个身份验证组件 这是我的注册页面 create User array action gt login echo form gt input primary email array size gt 32 echo form gt
  • Netbeans 6.8 中的 CakePHP 帮助程序自动完成

    谁能告诉我如何在 CakePHP 中 启用 CakePHP 的 Helper 自动完成功能 本质上是这样 例如 当我输入 form gt 它给了我一个清单 form的方法和变量 我读过了http bakery cakephp org art
  • CakePHP 2.1.x - 在 AppController 中运行没有任何模型的查询

    我正在尝试在 AppController 中对没有与之关联的模型的表运行查询 我不想使用模型 因为这个查询会在每个请求上触发 我想使用模型会让它慢一些 我在一个论坛上发现这可以通过 CakePHP 1 3 中的以下代码来实现 db Conn
  • 如何使用多个Auth组件?

    我使用用户模型将身份验证组件配置为 管理页面 但现在 我还想为客户端创建 配置身份验证 我尝试 重写 inialize This is in my ClientsController php public function initiali
  • 在 TinyMCE 中使用新的 iframe 嵌入代码嵌入 YouTube 视频

    我尝试使用旧的嵌入代码将 YouTube 视频添加到 TinyMCE 中 效果很好 一些用户可能没有意识到他们必须点击 YouTube 嵌入代码链接中的旧嵌入代码选项才能添加它 我想让用户变得更容易 并允许他们直接复制新的嵌入代码并将其粘贴
  • CakePHP保存三模型关系关联

    我有以下输出 需要将其插入数据库中 Array Test gt Array Question gt Array 0 gt Array category id gt 3 answer style id gt 2 Answer gt Array
  • 蛋糕控制台 2.2.1:烘焙错误

    运行 MAMP 的 OSX 机器 CakePHP 2 2 1 已正确安装和配置 这意味着当我浏览到 Index php 文件时 所有绿色条都显示出来 我已经完成了博客教程 并且正在开发我的第二个应用程序 其中脚手架已启动并运行 现在我第一次
  • cakephp 3 中的 SUM 查询不起作用

    我正在尝试添加同一字段的数据并希望返回我使用以下查询的结果 total this gt Details gt find all array fields gt array sum Details total downtime Details

随机推荐

  • 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