ruby-on-rails - 禁用 JS/Ajax 请求时的 ActionController::InvalidAuthenticityToken

标签 ruby-on-rails ruby-on-rails-4

我有两种带有选项remote: true的表单;一个向 create 操作发送 Ajax 请求,另一个向 destroy 操作发送 Ajax 请求。

启用 JavaScript 后,所有工作都会正常,但如果我禁用 JavaScript,然后单击,则会收到此错误:

ActionController::InvalidAuthenticityToken PersonsController#create

为什么显示此错误,如何修复它?

注意:我使用的是 Rails 4

更新

当我使用不带选项remote: true的普通表单时,rails会自动插入身份验证 token 的隐藏字段,但是当我在表单中使用remote: true时HTML 代码中没有这样的字段。似乎当有 remote 选项时,Rails 会以不同的方式处理身份验证 token ,那么我如何才能使其在两种情况下都起作用?

最佳答案

奇怪的是,这种行为在 Rails 4 中发生了变化。http://www.alfajango.com/blog/rails-4-whats-new/

Rails 表单现在不会在表单中呈现 CSRF 字段,除非您明确将其定义为表单的选项:

<%= form_for @some_model, :remote => true, :authenticity_token => true do |f| %>
<% end %>

添加此选项允许您在 Javascript 关闭时优雅地降级为 HTML 后备。

关于ruby-on-rails - 禁用 JS/Ajax 请求时的 ActionController::InvalidAuthenticityToken,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19452853/

相关文章:

ruby-on-rails - 如何按时间在 rails 中订购多个 ActiveRecords?

ruby-on-rails - 无方法错误 : undefined method `permit' for #<Hash:0x007facebc78c98> in Rails Minitest

ruby-on-rails - Rails 4 嵌套资源哈希未提交到数据库

ruby-on-rails - 如何使用 Rails Action Controller 嵌套参数来允许特定的属性哈希

mysql - rake db:migrate - Mysql2::错误:表 'database_development.locations' 不存在:显示 `locations` 中的完整字段

javascript - JavaScript 中未定义的 ruby​​ 对象

ruby-on-rails - spree 价格基于重量

ruby - 在 rails 4 中安装 opencv gem 时找不到 Opencv_photo 错误?

ruby-on-rails - Mongoid:返回 embedded_in 类

ruby-on-rails - 在 Rails 中实现通知