我有一个Rails 4.2应用程序。几个月前,我们开始遇到无效的真实性令牌错误。我发现以下场景重现了错误:
1)用户打开浏览器并访问ourwebsite.com/log-in。
2)用户在同一浏览器中打开第二个标签,然后访问我们的网站http://www.enroll-in-course。
3)用户返回选项卡1并登录提交POST表单。
4)用户转到选项卡二并在注册课程页面上提交POST表单。
5)出现错误。
以下是有关我们应用的一般信息:
我们正在使用Devise 3.4.1并且应用了零定制。
我们的应用程序控制器运行protect_from_forgery with: :exception
。
我们使用Turbolinks 2.5。
我们不会缓存任何一种表单。
我们在所有网页上的Javascript中运行Turbolinks.pagesCached(0);
。
重申一下,上述场景中的两种表单都是POST表单。除上述情况外,它们的工作完全正常。
据我所知,我们在处理用户会话或CSRF令牌方面没有任何变化。
我有一个理论认为,因为我们登录用户,会话中存储的csrf_token会发生变化。因此,当用户在第二个选项卡中提交表单时,表单中的令牌将与会话中的令牌不匹配,并引发InvalidAuthenticityToken。怎么了,怎么解决这个问题?更好的是,这是否可以解决?