【问题标题】:Rails CSRF token authenticity and DeviseRails CSRF 令牌真实性和设计
【发布时间】: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


【解决方案1】:

您必须在所有 ajax 请求中发送 authenticity_token 变量。您可以从页面的元标记中填充它。

【讨论】:

  • 正在发送。仅当我第二次登录时才会出现此问题.. 令牌似乎仅适用于一个会话
  • 我遇到了同样的问题,这个答案没有帮助。
猜你喜欢
  • 2021-12-10
  • 2017-01-01
  • 2014-06-16
  • 2017-07-15
  • 2015-07-24
  • 2012-03-10
  • 1970-01-01
  • 2012-05-08
  • 2015-12-29
相关资源
最近更新 更多