如何使用cURL在使用Devise的Rails应用程序上进行身份验证?

时间:2011-01-12 19:19:10

标签: curl ruby-on-rails-3 devise

我想使用cURL测试我的rails web服务,但到目前为止,我只能在停用before_filter :authenticate_user!时执行此操作。但我想以先验方式登录,然后创建,销毁等。

我看到使用cURL,您可以在cookie中验证并保存会话信息,用于以下请求,但我无法使其与Devise一起使用:在我的方案中,用户使用电子邮件登录/密码组合,所以我在尝试:

curl \
  -X POST \
  -d 'email=email@example.com&password=password' \
  -c cookie \
  http://localhost:3000/users/sign_in > out

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

有人可以给我一个想法/一个例子吗?

谢谢!

4 个答案:

答案 0 :(得分:23)

这有效:

<强>身份验证

curl -H 'Content-Type: application/json' \
  -H 'Accept: application/json' \
  -X POST http://localhost:3000/users/sign_in \
  -d "{'user' : { 'email' : 'test@example.com', 'password' : 'password'}}" \
  -c cookie

显示:

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

答案 1 :(得分:4)

这是因为Rails默认情况下会向表单添加真实性令牌,以防止恶意伪造提交的参数。由于您没有在请求中提供此令牌,因此rails不接受它。 你可以用

绕过这个
skip_before_filter :verify_authenticity_token

在您的控制器中,授权发生的地方,甚至更好地将其限制为授权操作:only。

答案 2 :(得分:1)

你有没有试过这样的事情(未经测试):

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

答案 3 :(得分:1)

获得以下answer from José Valim

  

如果您有网络服务,请登录   应该使用HTTP Auth完成。如果   不,你的选择是禁用   会话上的真实性令牌   形式,虽然不推荐。