2017-02-24 96 views
1

我已經成功地通過使用POST方法API這樣創造了新的紀錄(使用Curl::PostField導軌無法驗證CSRF令牌真實性

curl_post_fields = [ 
    Curl::PostField.content('first_name', first_name), 
    Curl::PostField.content('last_name', last_name),] 

    contact = Curl::Easy.http_post("#{ENV['API_V1_URL']}/contacts", *curl_post_fields) 
    contact.ssl_verify_peer = false 
    contact.http_auth_types = :basic 
    contact.username = ENV['API_V1_USERNAME'] 
    contact.password = ENV['API_V1_PASSWORD'] 
    contact.perform 
    response = JSON.parse(contact.body_str) 

但是當我通過補丁像這樣的更新記錄(使用JSON請求參數):

contact = Curl.patch("#{ENV['API_V1_URL']}/contacts/#{qontak_id}",{:email => email, :gender_id => 8}) 
contact.ssl_verify_peer = false 
contact.http_auth_types = :basic 
contact.username = ENV['API_V1_USERNAME'] 
contact.password = ENV['API_V1_PASSWORD'] 
contact.perform 
response = JSON.parse(contact.body_str) 

我得到了來自服務器的一些錯誤

Can't verify CSRF token authenticity 

Filter chain halted as :authenticate rendered or redirected

我也有CSRF protect_from_forgery with: :null_session

有可能使用Curl::PostField自動包括csrf token還是有像patch or put methodCurl::Postfield任何類似的方式關閉?

+0

嗨,大家好,我仍然堅持這一點,請幫忙嗎? –

回答

-1

你可以嘗試跳過明確令牌過濾器。

在您的API控制器:

skip_before_filter :verify_authenticity_token, only: [:put] respond_to :json

確保重新啓動服務器上。希望這可以幫助!

+1

這是否使API不太安全? –

+0

我想知道還有另一種方式,而不必關閉csrf或跳過令牌驗證? –

+0

您可以添加自己的api_key並在應用程序控制器中要求它。這是我前幾天遇到的一個常見問題,我認爲它與Rails 5有關。您是否正在運行僅API應用程序? –

相關問題