Rails帖子无法验证CSRF令牌的真实性

Cod*_*ang 2 javascript ajax jquery ruby-on-rails csrf

我已经检查了这个警告:无法验证CSRF令牌真实性轨道, 但我仍然无法弄清楚它为什么会导致此错误.

这是我的 ajax

 $.post(
      "<%= ajax_chats_path %>",
      {timestamp :(new Date()).getTime(),msg: $('#msg').val()},
      function (json) {
      console.log(json);
    });
Run Code Online (Sandbox Code Playgroud)

如果我加上这个

skip_before_action :verify_authenticity_token
Run Code Online (Sandbox Code Playgroud)

在控制器中,它可以解决这个问题.

我不确定这是正确的方法,因为它看起来可能会遇到一些安全攻击.

Mic*_*ill 5

您在Ajax调用中缺少CSRF令牌.您需要使用长格式$ .ajax调用,并添加以下内容:

beforeSend: $.rails.CSRFProtection
Run Code Online (Sandbox Code Playgroud)

而不是$.post,您可以使用$.ajax等效,如下所示:

$.ajax({
    type: "POST",
    url: "<%= ajax_chats_path %>",
    beforeSend: $.rails.CSRFProtection,
    data: {
        timestamp: (new Date()).getTime(),
        msg: $('#msg').val(),
        beforeSend: $.rails.CSRFProtection
    },
    success: function (json) {
      console.log(json);
    }
});
Run Code Online (Sandbox Code Playgroud)

您还应该强烈考虑将该datatype字段添加到调用中,以便jQuery知道响应的处置并相应地处理它.您可以选择"xml","json","html","script","jsonp"或"text"中的任何一个.有关更多详细信息,请参阅jQuery.ajax()API文档.