我有正在生产中运行的Rails4应用程序,我的访问者偶尔会遇到ActionController :: InvalidAuthenticityToken错误,无法重现。我收到各种形式的每日2-4条通知,但背后没有明确的逻辑。我收到的报告显示,表单提交的authenticity_token与会话中保存的令牌不同。这怎么可能?我几次设法解决这个问题,但是无法重现,形式的所有authenticity_token都与会话中存储的形式不同,并且出现了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实例中
要回答我自己的问题,以防万一有人遇到相同的问题,似乎从标题中删除csrf_meta_tag可以解决我们的问题。我不知道为什么。可能是负责设置auth_token的rails javascript以某种方式干扰了我们的javascript并导致了问题,但是我的直觉是它必须在服务器或客户端使用缓存。无论如何,在删除csrf_meta_tag之后,似乎我们摆脱了这个问题。只要确保您对所有表单都使用form_tag即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句