Rails4在生产环境中出现InvalidAuthenticityToken随机错误

3

我将Rails 3升级到Rails 4,现在只有在生产环境下,不同的操作时会随机出现InvalidAuthenticityToken错误。我尝试过但无法重现它。params哈希包含了真实性令牌。

Parameters : {"utf8"=>"✓", "authenticity_token"=>"26+QxdF3aHveYkibn9DJ8Hgz6mUna2v8MOp1bnM78cg=", "session"=>{"email"=>"abc@xyz.com", "password"=>"[FILTERED]"}, "commit"=>"Sign In", "action"=>"create", "controller"=>"sessions"}

Parameters : {"_method"=>"delete", "authenticity_token"=>"uafnPb4DjEJuW9YCTP9UB5tXyGlKbZh6uXlc6MVIoG8=", "controller"=>"sessions", "action"=>"destroy"}

Parameters : {"utf8"=>"✓", "authenticity_token"=>"Nhp4VNI9XJS7yqGRgGewOJ3ilkZSwMhmceXoOsoL/fw=", "volunteer_record"=>{"activity"=>"OTHER", "note"=>"Tuned the Melody Harp -- a tricky little beast....", "hh"=>"", "mm"=>"30"}, "commit"=>"Save", "action"=>"create", "controller"=>"volunteer_records"} 

非常感谢您的信任,以下是我翻译后的结果:

非常感谢您提供的帮助线索。当前使用了protect_from_forgery功能,设置为with: :exception


1
首先要做的是获取可重现的代码。没有它,就像在黑暗中捅东西一样。 - Sergio Tulentsev
我尝试使用不同的浏览器和平台访问该网站。你能建议其他尝试重现的方法吗?从日志中我可以看到其他用户在其他尝试中成功了。 - anu
我和其中一位用户交谈,他说他在8小时后访问了该网站。所以也许只有在会话过期后才能得到这个。但是我之前在Rails 3中没有遇到这个问题,现在却经常发生。你们有什么想法吗? - anu
你的用户经常会保持浏览器开启好几天吗?也许还有其他原因。 - Sergio Tulentsev
我所说的“相当频繁”是指每天大约10次。我读了一些关于Rails 3的文章,其中reset_session是protect_from_forgery(CSRF攻击)的默认操作。而在Rails 4中,默认为with: :exception。如果我将其切换为reset_session,是否会有任何副作用需要我知道? - anu
我不知道这样的副作用。这并不意味着没有任何副作用。 - Sergio Tulentsev
1个回答

1
使用
protect_from_forgery: :reset_session 

对我来说起作用了。这是Rails 3中的默认设置。


这个更改的原因是因为在会话重置后仍然可能运行代码。抛出异常可以确保代码处理将停止。只要没有问题,这就没问题。 - Chris Nicola

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接