2013-07-06 147 views
0

使用從殼curl發送GET來一個Ruby on Rails應用程序將數據傳遞到一個Ruby on Rails應用程序的工作原理就像一個魅力。但是,在PUT,POST等情況下,需要與CSRF令牌相抗衡。我似乎無法獲得在shell正確的語法(或PHP爲此事)傳遞這個數據。我認爲它應該像從捲曲從殼

curl -v -XPUT -i http://my-server:8080/some_command --data "somevalue=1" --data-urlencode X-CSRF-Token=$AUTH

,但不起作用。 (authenticity_token=$AUTH

請注意,當完成此頁面的瀏覽器加載時,AUTH被設置爲瀏覽器中顯示的會話變量。

當我這樣做,我得到一個302重定向到登錄頁面。

日誌說,

WARNING: Can't verify CSRF token authenticity 
Completed 401 Unauthorized in 0ms 

,然後將其重定向我到登錄頁面(302)。

+0

如果你被重定向到登錄頁面,我認爲這個問題是不是CSRF。日誌說什麼? –

+0

對不起,應該已經張貼細節。問題已更新。 –

+0

以我的Rails應用中產生的形式我有'<輸入名稱=「authenticity_token」類型=「隱藏」值=「XYuuLw4QBeBgp3tmykR6daZnsmMNOP8qcz4BLFZgINY =」>'所以如果添加'authenticity_token = TOKEN'到數據不爲你工作,這意味着你有錯誤的令牌 –

回答

0

你可以設置你的控制器操作跳過authenticity_token檢查(你可能會或可能不希望這樣做?)

# skip CSRF checking for json requests 
skip_before_filter :verify_authenticity_token, 
    :if => Proc.new { |c| c.request.format == 'application/json' }