我们的生产服务器几个月来一直在产生无效的真实性令牌错误。几乎所有发送 (PUT|POST|DELETE) 请求的表单都会产生错误。有时会发生错误,有时不会。它们发生的原因似乎没有押韵或原因。错误本身并不经常发生,但对我们来说是一个担忧。下面是导致此错误的典型表单的示例。
<form class="button_to" method="post" action="/lesson_progress_trackers/333">
<input type="hidden" name="_method" value="patch">
<input class="finish-lesson-button" type="submit" value="Done!">
<input type="hidden" name="authenticity_token" value="Qd3FsJZY2UXR9vahuFmaY5rrqA+J5xzGpl4cGI2Vwerx8PZPQtDMugz6oqoe3iviC+/U5zTYPdeX3apwbap09E==">
<input type="hidden" name="completed" value="true">
</form>
这是我迄今为止发现的。
- 我们使用 Turbolinks 2.5.3(我们已经一年多没有更新了)。
- 在每次出现无效令牌错误的情况下,用户都会将真实性令牌传递给服务器,但它最终是无效的。
- 我们目前
protect_from_forgery with: :exception
在我们的应用程序控制器中使用。 - 几个月前,当我们将一堆新代码投入生产时,错误开始出现。这段新代码跨越了数百个文件,但到目前为止,我在代码中没有发现任何与此问题相关的内容。
- 该错误可能发生在任何类型的浏览器和设备上。
- 增加的流量与出现的无效身份验证令牌之间没有关联。
- 用户可以来自任何国家。
- 这些不是遇到这些问题的机器人。我们甚至有一位同事经历过这个错误,尽管他们不记得他们做了什么来产生它。
- 用户遵循典型的(如果不是预期的)行为。他们正在按预期使用该应用程序。我查看了他们的点击和记录的行为历史来得出结论。
最终我想弄清楚如何解决这个问题。我的第一步是成功重现错误,但我什至做不到。我的问题是:我能做些什么来让我弄清楚是什么原因造成的?我的选择已经不多了。谢谢!