2013-01-23 78 views
0

我使用Devise(2.1.2)和Rails(3.2.9),我已经启用基本身份验证(测试)。我使用CURL发布JSON POST请求,并且看到奇怪的行为。第一次发送请求时(服务器重新启动后),但在第二次发送完全相同的请求后成功,认证失败。设计认证失败的第一次尝试,成功后

调试时,似乎胜利策略在第一次尝试时为零,但在第二次尝试时填充了三种策略。

这种行为的原因是什么?

+0

在用户认证中做了什么'winning_strategies'? –

+0

我只是想调试它,'wins_strategies'是Warden某个地方的列表,我对Devise/Warden内部构件不熟悉,所以这只是一些提供更多知识的暗示。 –

+0

它是否仅适用于使用CURL的JSON POST请求?你能通过浏览器登录吗? –

回答

0

尝试:

身份验证:

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 

对于post请求 -

你需要一个CSRF令牌用于Rails 3中的非GET请求。

这是因为Rails的默认添加一个真实性令牌从提交参数的恶意伪造的保护形式。由于您没有提供您的请求这个令牌,铁轨不接受它。你可以绕过这个

skip_before_filter :verify_authenticity_token 
+0

是的,我在日志中看到有关CSRF令牌的消息,但它只是一个警告,似乎没有任何效果。正如我所说的,完全相同的POST请求第一次失败并且第二次(以及之后的每次)都工作。为什么? –

+0

因此,这是可能为您取得首次认证的严重警告。第二次,它会以某种方式获得上一个令牌,然后您会得到认证。似乎再次出现'authenticity_token'问题。尝试绕过。 –

+0

“第二次,它以某种方式得到了前一个标记......” - 如何?我也第二次得到警告。 –

相关问题