2012-07-31 66 views
8

我有问题与铁路真实性令牌和设计登录/注销。Rails的CSRF令牌的真实性和设计

我正在使用骨干js构建单页面应用程序,所以我使用ajax来登录/注销用户。这是我正在观察的,我不明白为什么会发生这种情况。

我的布局中有csrf_meta_tags。页面加载后,我点击登录按钮填写表单并提交,我已成功登录。我可以做一个登录用户应该能够做的事情。

现在我单击一个注销按钮,通过ajax发送DELETE请求,并且我已成功注销。

上面的所有过程都在单个页面上没有页面重新加载发生其所有ajax。

现在当我再次单击登录并填写表单时,它会发送ajax请求,将我登录但在服务器控制台显示警告消息。

WARNING: Can't verify CSRF token authenticity 

现在为什么它(设计)登录我,摆在首位,如果它(轨道)无法验证CSRF令牌的真实性。

,现在当我尝试做的事情,一个登录的用户应该能够做到这一点失败,提交表单失败,从色器件

401 Unauthorized {"error":"You need to sign in or sign up before continuing."} 

错误消息,并且在服务器控制台上的警告

WARNING: Can't verify CSRF token authenticity 

,并在这一点上,我登出,如果我刷新页面我自己,我可以看到,我没有更多的登录。

这是怎么回事?

第一次登录后,我的第一个真实性标记是否过期?

我使用提前

rails (3.2.3) 
devise (2.1.0) 

谢谢:)

+2

完全相同的问题,我有。如果您找到解决方案,请发表评论。 Thx – vrepsys 2012-08-07 13:50:36

+0

我知道问题出现的原因。因为csrf令牌在注销时到期,并且由于它基于ajax的sign_out,页面不会重新加载,并且新的令牌不会在页面上获得,从而导致后续请求不匹配。现在我正在重新加载sign_out上的页面来解决这个问题。有人(可能是你?)在设计邮件列表上发布了相同的内容。让我们看看我们是否可以在那里得到一些东西... – Abid 2012-08-07 17:05:37

+0

@Abid,我得到了与我的旧铁路项目相同的错误,它让我发疯,你找到解决方案吗?如果你是hava,请告诉我们,tkx – Neo 2012-11-12 15:06:02

回答

1

你必须发送authenticity_token变量,所有的Ajax请求。你可以从页面的元标记中填写它。

+0

它正在发送。这个问题只发生在我第二次登录时..看起来这个令牌只适用于一个会话 – Abid 2012-07-31 11:59:15