多个标签打开时无效的真实性标记

时间:2017-01-04 15:55:42

标签: ruby-on-rails session ruby-on-rails-4 devise csrf

我有一个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。怎么了,怎么解决这个问题?更好的是,这是否可以解决?

0 个答案:

没有答案