9
我们的生产服务器现在已经生成了几个月的无效真实性令牌错误。几乎所有发送(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
。 - 几个月前,当我们将一堆新代码投入生产时,错误开始出现。这个新的代码跨越数百个文件,但到目前为止,我没有在代码中发现任何与此问题相关的文件。
- 错误可能发生在任何类型的浏览器和设备上。
- 流量增加与出现无效验证令牌之间没有关联。
- 用户可以来自任何国家。
- 这些不是遇到这些问题的机器人。我们甚至有同事遇到这个错误,尽管他们不记得他们做了什么来制作它。
- 用户遵循典型的如果不是预期的行为。他们按照预期使用应用程序。我浏览了他们的点击并记录了行为历史来总结这一点。
最终我想弄清楚如何解决这个问题。我的第一步是成功重现错误,但我甚至无法做到这一点。我的问题是:我能做些什么来帮助我找出造成这种情况的原因?我没有选择。谢谢!
是的,我做到了。这发生在真实的用户身上。这些不是机器人。我发现的模式是典型的用户行为。他们在做什么没有任何异常。我愿意说这是预期的行为。这就是为什么它很可怕。 – jason328
你能排除任何过期吗?饼干只是一件事,它可能是一些与时间相关的比较,服务器的错误时间,预计特定时间的数据库字段或类似的东西。 – Smar
我不这么认为?你能澄清一下你的问题吗? – jason328