我们的生产服务器几个月来一直在生成无效的真实性令牌错误。在几乎所有发送(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>
这是我迄今为止所发现的。
protect_from_forgery with: :exception
。最终我想弄清楚如何解决这个问题。我的第一步是成功重现错误,但我甚至无法做到这一点。我的问题是:我能做些什么来帮助我找出造成这种情况的原因?我的选项已经用完了。谢谢!
答案 0 :(得分:2)
Dunno如果为时已晚,无法使用,但我遇到了同样的问题。我能够通过以下方式重现:
InvalidAuthenticityToken
异常。我认为这发生在我身上,因为这两个标签共享一个会话,即打开新标签时创建的会话。但是,旧选项卡仍然具有登录表单中旧会话的csrf令牌。当新会话cookie和旧csrf令牌一起提交时,它们不匹配,因此抛出错误。
我不确定如何实际解决此问题,除了更优雅地处理错误,以便用户不会看到令人困惑的错误页面。
顺便说一下,我正在使用设计,但我不认为它是专门设计的。