我在一个页面上有两个表单,这两个表单都是这样声明的:
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处理表单(我做一些客户端错误处理和确认)。
答案 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
另见: