【问题标题】:CSRF token with multiple forms多种形式的 CSRF 代币
【发布时间】:2015-09-21 19:16:44
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

    您需要为 json 请求禁用 CSRF 保护,根据 Rails 文档: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
    

    另见:

    【讨论】:

    • 嗯,很有趣,我从来不知道。现在可以了,非常感谢!
    • 这个解决方案不会让您面临 CSRF 攻击吗?
    • @BKSpureon 是的。这是考虑此解决方案时的一个重要因素。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-02
    • 2021-02-01
    • 2012-07-02
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多