2011-10-07 137 views
2

我需要通過ruby腳本從辦公室計算機發布到遠程服務器。每次我嘗試,我得到「你想改變被拒絕」,當我看看日誌,我得到rails skip_before_filter:verify_authenticity_token不工作

ActionController::InvalidAuthenticityToken 

我誤解的東西的時間已經把

skip_before_filter :verify_authenticity_token 
控制器

了嗎? 下面是從Ruby腳本

url="display_ad[title]=#{row[1]}" 
    date_arr = row[2].split('/') 
    start_date = date_arr[2].to_s + "-" + date_arr[0].to_s + "-" + date_arr[1].to_s 
    url+="&display_ad[start_date]=#{start_date}" 

    date_arr = row[3].split('/') 
    end_date = Date.new(date_arr[2].to_i, date_arr[0].to_i, date_arr[1].to_i) 
    end_date = end_date + 7 
    end_date = end_date.strftime("%Y-%m-%d") 
    url+="&display_ad[end_date]=#{end_date}" 
    url+="&display_ad[slug]=#{row[7]}" 
    url+="&display_ad[category]=othr" 
    url = url.gsub("\n","") 
    url = url.gsub("\r","") 
    p url 
    easy = Curl::Easy.http_post("http://example.com/advertising/web/web_service_add", url) 

並在控制器動作

ad = DisplayAds.new(params[:display_ad]) 
ad.save 
+0

你能提供一些關於你的代碼的更多細節嗎? – rookieRailer

+2

真的很奇怪,跳過過濾器沒有幫助,但你可以嘗試'protect_from_forgery:only => []' – Bohdan

+0

不幸的是,我不得不將它改爲GET,因爲時間有限。 – hforbess

回答

0

我登陸這個頁面上具有一個Rails 2.3.8項目同樣的問題後的代碼。我在幾個控制器中成功地使用了skip_before_filter :verify_authenticity_token,但是這是我第一次嘗試在應用程序控制器中定義的動作的ApplicationController類的頂部使用它。

我按照預期將我的操作和skip_before_filter行一起移動到了另一個控制器,並正確禁用了驗證。我認爲這可能是問題所在,如果您直接在應用程序控制器中使用該類中定義的操作,則可能不會如您所期望的那樣工作。我還沒有調查過這可能是什麼原因,因爲我的懶惰編碼是,我正在努力的具體行動已經定義在那裏,所以移動它是一個更好的選擇。遇到此問題的其他人應嘗試將其受影響的操作移出ApplicationController課程。

有趣的是,在一個Rails 3.2.1項目中,我在ApplicationController中使用了skip_before_filter :verify_authenticity_token,並在該類中定義了一個動作,它工作正常。

0

請檢查你的代碼是否此行:

protect_from_forgery 

它將開始CSRF保護。請記住,在此方法之後放置所有sckip_before_filter。

幸運!