【问题标题】:Rails post can't verify CSRF token authenticityRails post 无法验证 CSRF 令牌的真实性
【发布时间】:2016-09-17 04:30:32
【问题描述】:

我已经检查了这个WARNING: Can't verify CSRF token authenticity rails 但我仍然无法弄清楚为什么会导致此错误。

这是我的ajax

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

如果我添加这个

skip_before_action :verify_authenticity_token

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

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

【问题讨论】:

标签: javascript jquery ruby-on-rails ajax csrf


【解决方案1】:

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

beforeSend: $.rails.CSRFProtection

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

$.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);
    }
});

您还应该强烈考虑将datatype 字段添加到调用中,以便jQuery 知道响应的处置并相应地处理它。您可以从“xml”、“json”、“html”、“script”、“jsonp”或“text”中进行选择。有关详细信息,请参阅jQuery.ajax() API documentation

【讨论】:

  • 谢谢,你帮了大忙。我稍后会添加datatype
【解决方案2】:

这对我有用,

$.ajax({
  beforeSend(xhr) {
    xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
  },

【讨论】:

    猜你喜欢
    • 2017-07-15
    • 2015-07-24
    • 2014-06-16
    • 2012-05-08
    • 2015-12-29
    • 2023-03-26
    • 2012-12-11
    • 2019-07-15
    • 2014-07-04
    相关资源
    最近更新 更多