2015-07-03 103 views
4

我有一個頁面上有兩種形式,兩者都聲明如下:CSRF令牌多種形式

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處理表單(我做了一些客戶端錯誤處理和確認)。

回答

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 

參見:

+0

嗯有意思,我從來不知道。它現在可以工作,所以非常感謝你! – docaholic