Rails自动更新CSRF令牌以重复JSON请求

时间:2015-11-26 15:10:15

标签: jquery ruby-on-rails json security csrf

我有一个单页的ROR应用程序,有很多远程表单。我的问题是在非幂等请求之后Rails更改CSRF令牌并使页面元中嵌入的令牌无效。因此,如果页面没有刷新,重复的非无效请求将失败。

例如,当通过POST提交的远程表单因验证错误而失败并且重新提交表单时,它会因InvalidAuthenticityToken错误而失败。

我认为这个问题很常见,Rails默认处理它,但显然不是。

1 个答案:

答案 0 :(得分:4)

我对此的解决方案,这里有任何可疑之处吗?:

application_controller.rb:

//= require jquery2
//= require jquery_ujs
//= require turbolinks=

$( document ).ajaxComplete(function( event, xhr, settings ) {
  header_token = xhr.getResponseHeader('X-CSRF-Token');
  if (header_token) $('meta[name=csrf-token]').attr('content', header_token)
});

的application.js:

Private Sub TextBox1_MouseHover(sender As Object, e As EventArgs) Handles TextBox1.MouseHover
        TextBox1.Visible = True
    End Sub

    Private Sub TextBox1_MouseLeave(sender As Object, e As EventArgs) Handles TextBox1.MouseLeave
        TextBox1.Visible = False
    End Sub