多种形式的CSRF令牌

doc*_*lic 5 ajax ruby-on-rails csrf ruby-on-rails-4

我在一个页面上有两个表单,它们的声明如下:

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 处理表单(我做了一些客户端错误处理和确认)。

Boo*_*age 2

根据 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
Run Code Online (Sandbox Code Playgroud)

也可以看看: