【发布时间】:2013-11-09 00:56:56
【问题描述】:
我从 Rails 3 升级到 Rails4,现在我在生产中随机收到 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。
【问题讨论】:
-
嗯,第一件事是得到一个复制品。没有它,它就在黑暗中刺伤。
-
我曾尝试从不同的浏览器和不同的平台访问该网站。你能建议我尝试和复制的其他方法吗?我可以在日志中看到它在其他尝试中对用户有效。
-
我与其中一位用户交谈,他说他在 8 小时后访问了该网站。所以也许我只有在会话到期后才能得到这个。但是我之前在 Rails 3 中并没有得到这个,现在它已经很频繁地发生了。有什么想法我可以在这里做什么?
-
很频繁?您的用户会让浏览器打开几天吗?也许还有其他原因。
-
相当频繁,我的意思是每天大约 10 个。我读了一些,Rails 3 将 reset_session 作为protect_from_forgery(CSRF 攻击)的默认操作。 Rails 4 默认具有 with: :exception。如果我把它切换到reset_session,会有什么我应该知道的副作用吗?
标签: ruby-on-rails ruby-on-rails-4