我有两种带有选项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/