gpt4 book ai didi

ruby-on-rails - Rails 3 简单的 AJAX 删除不起作用,因为 authenticity_token 没有随请求一起发送

转载 作者:行者123 更新时间:2023-12-02 07:47:44 24 4
gpt4 key购买 nike

我正在提交一个简单的 ajax 删除请求,如下所示:

#invitation_actions
=link_to "delete", invitation_path(invitation), :method=>:delete, :remote=>true, :class=>"remove", :confirm=>'Are you sure you?'

请注意,由于包含在所有页面中的 csrf_meta_tag 标记,具有请求的页面包含 authenticity_token。

当我查看日志时,我发现删除请求缺少 authenticity_token:

在 2011-04-22 11:21:21 -0700 开始为 127.0.0.1 删除“/invitations/5” 由 InvitationsController 处理#destroy as 参数:{"id"=>"5"}

现在,如果我从代码中删除“:remote=>:true”,即我进行常规页面加载,删除会起作用,并且我会在日志文件中看到以下内容:

在 2011-04-22 12:52:19 -0700 开始为 127.0.0.1 发布“/invitations/10” 由 InvitationsController#destroy 处理为 HTML 参数:{"authenticity_token"=>"qlT8uX/WGQeOQSmVZzw1v8rFdSTHDRbzNY0zpSc9mV0=", "id"=>"5"}

为什么在 AJAX 情况下是 DELETE 而在非 AJAX 情况下是 POST?为什么 DELETE 不包含 authenticity_token?

感谢您的帮助。

最佳答案

您的问题的第一个可能原因(我能想到的)是,如果您的 UJS 脚本已超过几个月,您可能需要将其更新到最新版本,以便您的应用程序发送真实性带有 AJAX 请求的 token 。

这种行为变化发生在 2011 年 2 月,这意味着所有 Rails UJS 脚本都必须更新:

http://groups.google.com/group/rubyonrails-security/browse_thread/thread/2d95a3cc23e03665

问题的第二部分询问在非 AJAX 情况下用于删除的 HTTP POST 动词。这是因为 Rails 必须模拟 REST 表单处理,因为浏览器不会实现所有 4 个 HTTP 动词,例如GET、POST、PUT 和 DELETE,因为这些动词在 HTML 中无效。

JavaScript (AJAX) 可以做真正的事情,因为它控制发送到 AJAX 端点的 header 。

关于ruby-on-rails - Rails 3 简单的 AJAX 删除不起作用,因为 authenticity_token 没有随请求一起发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5759574/

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