Rails 4.2 InvalidAuthenticityToken 错误,但仅在生产中
Rails 4.2 InvalidAuthenticityToken error, but only in production
我正在制作这个使用(或多或少)来自 https://www.railstutorial.org/book 的会话管理代码的小应用程序。
它在开发模式下工作正常,如果 运行 在我的开发机器上在生产模式下工作。当我部署到机器 运行 nginx 和 Phusion Passenger 时,我开始在每个请求中获取 InvalidAuthenticityToken,其中使用了令牌(例如 method: delete
的表单和链接)。
我已验证令牌已生成并随请求一起发送。
我注意到一件事。 /
上的应用程序主要区域向所有人开放,不需要任何类型的登录。需要登录的区域在/admin
。开发中运行时,会生成一个会话cookie,路径为/
。部署后,有两个会话 cookie,一个用于 /
,一个用于 /admin
。我怀疑 CSRF 令牌是使用一个会话生成的,然后使用另一个会话进行验证。
这听起来合理吗?我将如何进一步调查并修复它?
提前致谢。
这似乎与 Phusion Passenger 5 beta 中有关 cookie 的错误有关:
Session being emptied on POST requests in 5.0.0-beta2
降级到 4.0.57 解决了问题。
我正在制作这个使用(或多或少)来自 https://www.railstutorial.org/book 的会话管理代码的小应用程序。
它在开发模式下工作正常,如果 运行 在我的开发机器上在生产模式下工作。当我部署到机器 运行 nginx 和 Phusion Passenger 时,我开始在每个请求中获取 InvalidAuthenticityToken,其中使用了令牌(例如 method: delete
的表单和链接)。
我已验证令牌已生成并随请求一起发送。
我注意到一件事。 /
上的应用程序主要区域向所有人开放,不需要任何类型的登录。需要登录的区域在/admin
。开发中运行时,会生成一个会话cookie,路径为/
。部署后,有两个会话 cookie,一个用于 /
,一个用于 /admin
。我怀疑 CSRF 令牌是使用一个会话生成的,然后使用另一个会话进行验证。
这听起来合理吗?我将如何进一步调查并修复它?
提前致谢。
这似乎与 Phusion Passenger 5 beta 中有关 cookie 的错误有关:
Session being emptied on POST requests in 5.0.0-beta2
降级到 4.0.57 解决了问题。