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

前端之家收集整理的这篇文章主要介绍了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,看看错误是否消失?他们有没有失去他们的会议?这可能是你的问题或他们的.

猜你在找的Ruby相关文章