我想使用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
有人可以给我一个想法/一个例子吗?
谢谢!
答案 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)
如果您有网络服务,请登录 应该使用HTTP Auth完成。如果 不,你的选择是禁用 会话上的真实性令牌 形式,虽然不推荐。