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