2011-01-12 73 views
14

我想使用cURL來測試我的rails web服務,但到目前爲止,我只能在去激活before_filter :authenticate_user!的時候這樣做。但我想先登錄,然後創建,銷燬等。如何使用cURL在使用Devise的Rails應用程序進行身份驗證?

我看到用cURL可以驗證並將會話信息保存在cookie中,用於您的以下請求,但我無法'牛逼使其與設計工作:在我的情況下,在使用電子郵件/密碼組合的用戶登錄,所以我想:

 
curl \ 
    -X POST \ 
    -d '[email protected]&password=password' \ 
    -c cookie \ 
    http://localhost:3000/users/sign_in > out 

,我也得到:ActionController::InvalidAuthenticityToken in Devise/sessionsController#create

可能有人給我一個想法/ 一個例子?

謝謝!

回答

23

這工作:

身份驗證:

curl -H 'Content-Type: application/json' \ 
    -H 'Accept: application/json' \ 
    -X POST http://localhost:3000/users/sign_in \ 
    -d "{'user' : { 'email' : '[email protected]', 'password' : 'password'}}" \ 
    -c cookie

顯示:

curl -H 'Content-Type: application/json' \ 
    -H 'Accept: application/json' \ 
    -X GET http://localhost:3000/pages/1.xml \ 
    -b cookie
+0

這適用於GET請求,但是,對於POST請求它似乎不起作用。 – Altonymous 2012-01-04 18:44:47

1

你有沒有嘗試過這樣的事情(未測試):

curl --user name:password http://www.domain.com 
curl --user name:password -f 'key=value' http://www.domain.com 
+0

發送這樣的參數或者不符合給定的情景。 – 2011-01-12 19:55:34

4

這是因爲Rails的默認添加真實性令牌形式提交參數的惡意僞造保護。由於您沒有提供您的請求這個令牌,鐵軌不接受它。 你可以在你的控制器,其中授權發生與

skip_before_filter :verify_authenticity_token 

繞過這個,甚至最好將其限制在符合授權行動:只。

+0

我試過這個,但它不起作用。 – Martin 2012-06-06 20:46:10

1

得到以下answer from José Valim

如果你有一個Web服務,在 簽署應該使用HTTP認證來完成。如果不是 ,您的選擇是在會話 表單上禁用 真實性令牌,儘管不推薦。

相關問題