具有多种形式的CSRF令牌

时间:2015-07-03 23:48:01

标签: ruby-on-rails ajax ruby-on-rails-4 csrf

我在一个页面上有两个表单,这两个表单都是这样声明的:

form_for @student, {remote:true, format: 'json'} do |f|

form_for @teacher, {remote:true, format: 'json'} do |f|

但是,当我单击teacher表单的提交按钮时,它会出错,并为该请求说“无效的CRSF令牌”。对student表单的请求工作正常。

我在主<%= csrf_meta_tags %>文件中有application.html.erb,而teacher表单在提交中有一个CSRF令牌。我没有做API,我只想通过AJAX处理表单(我做一些客户端错误处理和确认)。

1 个答案:

答案 0 :(得分:1)

根据Rails文档,您需要为json请求禁用CSRF保护:http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html

  

记住XML或JSON请求也会受到影响,这很重要   如果您正在构建API,则需要以下内容:

class ApplicationController < ActionController::Base
  protect_from_forgery
  skip_before_action :verify_authenticity_token, if: :json_request?

  protected

  def json_request?
    request.format.json?
  end
end

另见: