AJAX를 사용하여보기에서 컨트롤러로 데이터를 보내고 있는데이 오류가 발생했습니다.
경고 : CSRF 토큰 진위를 확인할 수 없습니다
나는이 토큰을 데이터와 함께 보내야한다고 생각합니다.
아무도 내가 어떻게 할 수 있는지 알고 있습니까?
편집 : 내 솔루션
AJAX 포스트에 다음 코드를 넣어서이 작업을 수행했습니다.
headers: {
'X-Transaction': 'POST Example',
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
},
답변
이 작업을 수행해야합니다.
-
<%= csrf_meta_tag %>
레이아웃에 있는지 확인하십시오 -
추가
beforeSend
모든 아래와 같이 헤더를 설정하는 아약스 요청을 :
$.ajax({ url: 'YOUR URL HERE',
type: 'POST',
beforeSend: function(xhr) {xhr.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content'))},
data: 'someData=' + someData,
success: function(response) {
$('#someDiv').html(response);
}
});
모든 요청에서 토큰을 보내려면 다음을 사용할 수 있습니다.
$.ajaxSetup({
headers: {
'X-CSRF-Token': $('meta[name="csrf-token"]').attr('content')
}
});
답변
이를 수행하는 가장 좋은 방법은 실제로 <%= form_authenticity_token.to_s %>
레일 코드에서 직접 토큰을 인쇄하는 데 사용 하는 것입니다. 다른 게시물에서 언급했듯이 자바 스크립트를 사용하여 csrf 토큰의 돔을 검색 할 필요는 없습니다. 아래와 같이 헤더 옵션을 추가하십시오.
$.ajax({
type: 'post',
data: $(this).sortable('serialize'),
headers: {
'X-CSRF-Token': '<%= form_authenticity_token.to_s %>'
},
complete: function(request){},
url: "<%= sort_widget_images_path(@widget) %>"
})
답변
올바르게 기억한다면이 문제를 해결하기 위해 양식에 다음 코드를 추가해야합니다.
<%= token_tag(nil) %>
매개 변수를 잊지 마십시오.
답변
실제로 가장 간단한 방법입니다. 헤더 변경에 신경 쓰지 마십시오.
당신이 가지고 있는지 확인하십시오 :
<%= csrf_meta_tag %> in your layouts/application.html.erb
다음과 같이 숨겨진 입력 필드를 수행하십시오.
<input name="authenticity_token"
type="hidden"
value="<%= form_authenticity_token %>"/>
또는 jQuery 아약스 게시물을 원한다면 :
$.ajax({
type: 'POST',
url: "<%= someregistration_path %>",
data: { "firstname": "text_data_1", "last_name": "text_data2", "authenticity_token": "<%= form_authenticity_token %>" },
error: function( xhr ){
alert("ERROR ON SUBMIT");
},
success: function( data ){
//data response can contain what we want here...
console.log("SUCCESS, data="+data);
}
});
답변
csrf 메타 태그를 포함하여 이전 앱에서 rails 3.1로 업그레이드해도 여전히 해결되지 않습니다. rubyonrails.org 블로그에서 업그레이드 팁, 특히 레이아웃의 헤드 섹션에있는 jquery 라인을 제공합니다.
$(document).ajaxSend(function(e, xhr, options) {
var token = $("meta[name='csrf-token']").attr("content");
xhr.setRequestHeader("X-CSRF-Token", token);
});
이 블로그 게시물에서 가져 왔습니다 : http://weblog.rubyonrails.org/2011/2/8/csrf-protection-bypass-in-ruby-on-rails .
필자의 경우 세션은 각 아약스 요청에 따라 재설정되었습니다. 위의 코드를 추가하면 문제가 해결되었습니다.
답변
<%= csrf_meta_tag %>
레이아웃에 있는지 확인하십시오beforeSend
헤더를 설정하기 위해 ajax 요청에 csrf-token을 포함 시키려면 a 를 추가하십시오 . 이것은post
요청 에만 필요 합니다.
csrf-token을 읽는 코드는에서 사용할 수 rails/jquery-ujs
있으므로 다음과 같이 사용하는 것이 가장 쉽습니다.
$.ajax({
url: url,
method: 'post',
beforeSend: $.rails.CSRFProtection,
data: {
// ...
}
})
답변
기사에 당신이 찾고있는 대부분의 답변이 있으며 매우 흥미 롭기 때문에 여기에 링크한다고 생각했습니다.