Rails post 无法验证 CSRF 令牌的真实性
Posted
技术标签:
【中文标题】Rails post 无法验证 CSRF 令牌的真实性【英文标题】:Rails post can't verify CSRF token authenticity 【发布时间】: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
在控制器中,可以解决这个问题。
我不确定这是不是正确的做法,因为它看起来可能会遇到一些安全攻击。
【问题讨论】:
请看这里。 ***.com/questions/7203304/… 我已经检查过了,但我仍然不知道如何修改到我的ajax中。我是开发 javascript 和 rails 的新手。 【参考方案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'))
,
【讨论】:
以上是关于Rails post 无法验证 CSRF 令牌的真实性的主要内容,如果未能解决你的问题,请参考以下文章