【问题标题】:Rails 4.2 InvalidAuthenticityToken error, but only in productionRails 4.2 InvalidAuthenticityToken 错误,但仅在生产中
【发布时间】:2015-01-16 13:16:06
【问题描述】:

我正在制作这个小应用程序,它使用(或多或少)来自https://www.railstutorial.org/book 的会话管理代码。

它在开发模式下运行良好,如果在我的开发机器上以生产模式运行。当我部署到一台运行 nginx 和 Phusion Passenger 的机器上时,我开始在每个使用令牌的请求上获取 InvalidAuthenticityToken(例如带有 method: delete 的表单和链接)。

我已验证令牌已生成并与请求一起发送。

我注意到一件事。应用程序的主要区域/ 对所有人开放,不需要任何登录。需要登录的区域是/admin。在开发中运行时,会生成一个会话 cookie,其路径为 /。部署后,有两个会话 cookie,一个用于/,一个用于/admin。我怀疑 CSRF 令牌是使用一个会话生成的,然后使用另一个会话进行验证。

这听起来合理吗?我将如何进一步调查并修复它?

提前谢谢你。

【问题讨论】:

  • 使用此命令重新生成新令牌 - rake secret
  • @CaffeineCoder 这有什么帮助?这只是打印出一个随机生成的令牌。
  • 需要粘贴到secret_token.rb中
  • @CaffeineCoder 该文件在 Rails 4.0 之后不再使用。

标签: ruby-on-rails nginx passenger


【解决方案1】:

这似乎与 Phusion Passenger 5 beta 中有关 cookie 的错误有关:

Session being emptied on POST requests in 5.0.0-beta2

降级到 4.0.57 解决了这些问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-23
    • 2016-11-14
    • 2013-09-04
    • 2018-11-11
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多