2011-01-12 74 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认证来完成。如果不是 ,您的选择是在会话 表单上禁用 真实性令牌,尽管不推荐。

相关问题