【发布时间】:2012-07-29 01:35:39
【问题描述】:
我在使用 Rails 真实性令牌和设计登录/注销时遇到问题。
我正在使用主干 js 构建单页应用程序,因此我使用 ajax 登录/注销用户。这是我所观察到的,我不明白为什么会发生这种情况。
我的布局中有 csrf_meta_tags。页面加载,我点击登录按钮填写表格并提交,我成功登录。我可以做登录用户应该做的事情。
现在我单击一个注销按钮,该按钮通过 ajax 发送 DELETE 请求,我已成功注销。
上面的所有过程都在一个页面上,没有页面重新加载发生,它都是 ajax。
现在,当我再次单击登录并填写发送 ajax 请求的表单时,我会登录,但会在服务器控制台显示警告消息。
WARNING: Can't verify CSRF token authenticity
如果它(rails)无法验证 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)
提前致谢:)
【问题讨论】:
-
我遇到的问题完全相同。如果您找到了解决方案,请发表评论。谢谢
-
我知道为什么会出现这个问题。这是因为 csrf 令牌在注销时过期,并且由于它是基于 ajax 的 sign_out 页面不会重新加载并且新令牌不会进入页面,因此导致后续请求不匹配。现在我正在重新加载 sign_out 上的页面以解决该问题。有人(可能是你?)在设计邮件列表上发布了相同的内容。让我们看看我们能不能得到一些东西......
-
@Abid,我在旧的 Rails 项目中遇到了同样的错误,这让我抓狂,你找到解决方案了吗?如果你有,请告诉我们,tkx
-
@Abid 我的应用程序出现同样的错误。
-
我不知道这是否应该在答案中,如果是,请告诉我:),也许这就是你的答案stackoverflow.com/questions/11845500/…
标签: ruby-on-rails ruby-on-rails-3 backbone.js csrf