【问题标题】:Rails4 InvalidAuthenticityToken random error on productionRails4 InvalidAuthenticityToken 生产中的随机错误
【发布时间】: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


【解决方案1】:

使用

protect_from_forgery: :reset_session 

为我工作。这是 Rails 3 中的默认设置。

【讨论】:

  • 更改的原因是因为即使在会话重置后代码仍可能运行。抛出异常可确保停止代码处理。只要没有问题就可以了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-30
  • 1970-01-01
  • 1970-01-01
  • 2011-03-26
  • 1970-01-01
  • 2019-04-10
相关资源
最近更新 更多