2011-01-12 9 views
14

私はcURLを使用して私のレールウェブサービスをテストしたいと思いますが、これまではbefore_filter :authenticate_user!を無効にしている間にしかできませんでした。しかし、私は先験的にログインして、作成して破壊したいと思っています。Deviseを使用するRailsアプリケーションでcURLを使用して認証するにはどうすればよいですか?

私はcURLを使ってセッション情報を認証し、次の要求に使用するクッキーに保存できることを知りました。 tはそれが考案して動作させる:私のシナリオでは、電子メール/パスワードの組み合わせを使用して、ユーザーがログインするので、私がしようとしている:

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

と私が取得:ActionController::InvalidAuthenticityToken in Devise/sessionsController#create

は、誰かが私にアイデアを与えることができます/ 例?

ありがとうございます!

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

答えて

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

+1

これは、Rails 3で非GETリクエストのCSRFトークンが必要なためです(http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails/) – iainbeeston

+7

一重引用符と二重引用符を切り替えた後、何かにアクセスできない認証がステップしました。 – graywh

1

は、あなたがこの(テストしていない)のようなものを試してみました。リクエストにこのトークンを指定しないと、railsはそれを受け入れません。 あなたが持つ認可アクションにそれを制限するために、より良いとしても、認証が行われ、あなたのコントローラに

skip_before_filter :verify_authenticity_token 

でこれを回避することができますのみ。

+0

いずれかの特定のシナリオを満足していないようなパラメータを送信します。 –

4

デフォルトでRailsが提出されたパラメータの悪質な偽造から保護するためのフォームに真正トークンが追加されますので、これは次のとおりです。

+0

私はこれを試しましたが、動作していません。 – Martin

1

には、以下のanswer from José Valimガット:

Webサービスを使用している場合は、HTTP認証を使用して行われるべき にサインインします。 でない場合は、 認証トークンをセッション フォームで無効にすることをお勧めしますが、お勧めしません。

関連する問題