Rails post 无法验证 CSRF 令牌的真实性
Rails post can't verify CSRF token authenticity
我检查过这个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
在controller中,可以解决这个问题。
我不确定这样做是否正确,因为它看起来可能会遇到一些安全攻击。
您在 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。
这对我有用,
$.ajax({
beforeSend(xhr) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
},
我检查过这个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
在controller中,可以解决这个问题。
我不确定这样做是否正确,因为它看起来可能会遇到一些安全攻击。
您在 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。
这对我有用,
$.ajax({
beforeSend(xhr) {
xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))
},