具有多种形式的 CSRF 令牌
CSRF token with multiple forms
我在一个页面上有两个表单,它们都是这样声明的:
form_for @student, {remote:true, format: 'json'} do |f|
和
form_for @teacher, {remote:true, format: 'json'} do |f|
但是,当我单击 teacher
表单的提交按钮时,它出错了,为该请求说 "Invalid CRSF token"。 student
表单的请求工作正常。
我在 application.html.erb
主文件中有 <%= csrf_meta_tags %>
,并且 teacher
表单在提交中确实有一个 CSRF 令牌。我没有做 API,我只是希望通过 AJAX 处理表单(我做了一些客户端错误处理和确认)。
根据 Rails 文档,您需要为 json 请求禁用 CSRF 保护:http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html
It's important to remember that XML or JSON requests are also affected
and if you're building an API you'll need something like:
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
另请参阅:
我在一个页面上有两个表单,它们都是这样声明的:
form_for @student, {remote:true, format: 'json'} do |f|
和
form_for @teacher, {remote:true, format: 'json'} do |f|
但是,当我单击 teacher
表单的提交按钮时,它出错了,为该请求说 "Invalid CRSF token"。 student
表单的请求工作正常。
我在 application.html.erb
主文件中有 <%= csrf_meta_tags %>
,并且 teacher
表单在提交中确实有一个 CSRF 令牌。我没有做 API,我只是希望通过 AJAX 处理表单(我做了一些客户端错误处理和确认)。
根据 Rails 文档,您需要为 json 请求禁用 CSRF 保护:http://api.rubyonrails.org/classes/ActionController/RequestForgeryProtection.html
It's important to remember that XML or JSON requests are also affected and if you're building an API you'll need something like:
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
另请参阅: