ruby-on-rails – Rails4 ActionController :: InvalidAuthenticityToken错误

我有Rails4应用程序在生产中运行,我的访问者偶尔运行到ActionController :: InvalidAuthenticityToken错误,我无法复制.我从各种形式得到2-4个日常通知,没有明确的逻辑背后.我收到的报告显示,表单提交的真实性不同于会话中保存的报告.这怎么可能?我自己很少遇到这个问题,但是不可能复制,所有的突然的真实性都与存储在会话中的一样不一致,而InvalidAuthenticityToken出现了.
任何想法从哪里开始寻找?

例:

Request:
-------------------------------

  * URL        : https://domain/signin
  * HTTP Method: POST
  * IP address : 113.96.xx.xx
  * Parameters : {"utf8"=>"✓","authenticity_token"=>"MOh9JDE1AZ0CbIw/M33vfhjRShwzI6oqMhi8lk+n7OE=","email"=>"xxxx@xxx","password"=>"[FILTERED]","commit"=>"Sign In","controller"=>"clients","action"=>"signin","locale"=>"en"}

-------------------------------
Session:
-------------------------------

  * session id: [FILTERED]
  * data: {"_csrf_token"=>"QazCSVGeZlxEh83XTM+f5PkC/zopwCF96yV4duRats0="}

更新:想补充说,我通过两个负载平衡的AWS EC2实例提供的页面,并在Redis ElastiCache实例中存储会话

解决方法

由Rails生成的任何表单(即form_for等等,不用你在模板中放置< form>)就会在需要时将反CSRF令牌添加为隐藏字段.如果您自己编写了表单,并且没有包含CSRF隐藏的输入,则Rails依赖于CSRF元标记和JavaScript以使事情工作.所以如果你写了你自己的表单,并且你没有包含隐藏的字段,如果客户端的JavaScript因为某种原因不起作用,你可以得到这个错误.因为“客户端的JavaScript不适用于任何原因”子句是难以检测和调试的,所以我实际上故意删除了我的网站上的CSRF元标记.这样,如果我忘记包含隐藏的输入,它会破坏每个人(快速失败),我会立即找到它,我可以解决它.我会建议你这样做.

据说,我建议您查看这些“访客”的访问日志.你有什么奇怪的吗?

>在提交之前,他们是否立即访问具有表单的页面?如果没有,也许他们是机器人或实际的,实际的CSRF尝试(这是检查,不是吗?:)).>他们是否在一个EC2上加载表单,最后提交给另一个?如果是这样,你可以关闭一个EC2,看看错误是否消失?他们有没有失去他们的会议?这可能是你的问题或他们的.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...