AJAX를 사용하여 인증 토큰을 Rails로 전송하는 적절한 방법
이것은 동작하지만, 인증 토큰이 없기 때문에 정지됩니다.
$(".ajax-referral").click(function(){
$.ajax({type: "POST", url: $(this).parent("form").attr("action"), dataType: "script"});
return false;
});
그래서 이렇게 추가해봤어요.
$(".ajax-referral").click(function(){
$.ajax({type: "POST", url: $(this).parent("form").attr("action") + "?&authenticity_token=" + AUTH_TOKEN, dataType: "script"});
return false;
});
auth_token은 파라미터로 올바르게 전달되지만 나머지 폼은 손실되는 것 같습니다.
양식 데이터 전송과 인증 토큰 전송을 모두 완료하려면 어떻게 해야 합니까?
이것은 철도 환경입니다.그리고 내 머릿속에 이게 있어.
= javascript_tag "var AUTH_TOKEN = '#{form_authenticity_token}';" if protect_against_forgery?
내가 시도해 본 것
1.
= hidden_field :authenticity_token, :value => form_authenticity_token
2.
$.ajax({type: "POST", url: $(this).parent("form").attr("action"), dataType: "script", authenticity_token: AUTH_TOKEN});
3.
// Always send the authenticity_token with ajax
$(document).ajaxSend(function(event, request, settings) {
if ( settings.type != 'GET' ) {
settings.data = (settings.data ? settings.data + "&" : "")
+ "authenticity_token=" + encodeURIComponent( AUTH_TOKEN );
}
});
여러분은 '아, 아, 아, 아, 아, 아, 아, 아, 아, 맞다'를 읽고 있습니다.action
및 하려면 폼 폼를 전송하려면 폼해야 합니다.폼 데이터를 시리얼화하여 할 수 있습니다(예: 폼 데이터). 또는 폼 데이터를 직렬화하여 다음과 같이 에이잭스 요청으로 전송할 수 있습니다.
$(".ajax-referral").click(function(){
$.ajax({
type: "POST",
url: $(this).parent("form").attr("action") + "?&authenticity_token=" + AUTH_TOKEN,
data:$(this).parent("form").serialize(),
dataType: "script"
});
return false;
});
이렇게 하면 양식 데이터가 직렬화되어 Ajax 요청과 함께 전송되고 인증 토큰이 쿼리 문자열을 통해 이미 전송되고 있습니다.
또한 상단에 다음 ERB가 있는 경우 이 토큰은 application.html.erb 레이아웃 파일 선두에 있는 "meta" 태그 중 하나에 이미 표시됩니다.
<%= csrf_meta_tag %>
이 ERB는 대략 다음과 같습니다.
<meta content="abc123blahblahauthenticitytoken" name="csrf-token">
그런 다음 다음 코드와 함께 jQuery를 사용하여 가져올 수 있습니다.
var AUTH_TOKEN = $('meta[name=csrf-token]').attr('content');
이 중 어느 것도 잘 되지 않았습니다.X-CSRF-Token
다음과 같이 JS를 통해 요청 헤더의 값을 지정합니다.
request.setRequestHeader('X-CSRF-Token', token)
token
CSRF가 있다.이거 제가 받은 건데<meta name="csrf-token">
가 붙어 있고, 「」를 사용하지 않았습니다.encodeURIComponent()
이것은 일부 사용자에게 유용한 것으로 판명되었기 때문에 업데이트
전체적으로는 다음과 같습니다.
var token = document.querySelector('meta[name="csrf-token"]').content
request.setRequestHeader('X-CSRF-Token', token)
감사합니다!
좀 더 일반적인 용도를 위해 명확히 하기 위해서입니다.
머릿속에 var AUTH_TOKEN이 있는 js 태그가 필요합니다.이런 식이어야 합니다.
<%= csrf_meta_tag %>
<%= javascript_tag "var AUTH_TOKEN = '#{form_authenticity_token}';" if protect_against_forgery? %>
그 후, 자신의 진정성을 간단하게 표현해 주세요_http=부모(폼) 등을 사용할 필요가 없는 경우 AUTH_TOKEN 데이터를 사용합니다.
$.ajax({
type: 'post',
dataType:'text',
data: "user_id="+user_id+"&authenticity_token="+AUTH_TOKEN,
url:'/follow/unfollow'
})
이 지식을 공유해 주신 위 분들께 감사드립니다!
5.1 Rails 5.1+를 됩니다.Rails
(AJAX에서) JS 도우미(From)rails-ujs
예:) 예:
Rails.ajax({
url: "/your/url",
type: "POST",
data: "a=1&b=2",
success: function(data) {
console.log(data);
}
});
이 라이브러리에서는 CSRF 토큰을 수동으로 취득할 수 있는 도우미도 제공됩니다.
Rails.csrfToken();
숨김 입력으로서 폼 자체에 AUTH_TOKEN 을 포함할 수 있습니다.
<input type="hidden" name="AUTH_TOKEN">1234abcd</input>
방금 이 문제에 부딪혔는데 응용 프로그램.js 파일에서 다음 방법을 시도했습니다.
$(document).ajaxSend(function(e, xhr, options) {
if (options.data == null) {
options.data = {};
}
options.data['authenticity_token'] = token;
});
이것이 제가 아이디어를 얻은 첫 번째 질문입니다.ajax 질문 보내기
다음은 모든 AJAX 요청에 적용되는 솔루션입니다.다음 항목을 all.js(또는 사이트 전체의 javascript 파일)에 추가합니다.
$.ajaxSetup({
headers: {
'X-CSRF-Token': document.querySelector('meta[name="csrftoken"]').content
}
});
그러면 토큰이 모든 AJAX 요청의 헤더로 자동으로 추가됩니다.7번 철도로는 통합니다.
단순히 form_tag를 사용하면 CSRF 토큰 파라미터가 자동으로 포함됩니다.Rails는 "Unoblusive Javascript"를 지원하므로 폼은 여전히 AJAX를 통해 제출됩니다.컨트롤러 액션은 "response_to" 블록을 지원하며 확장자 .js.erb를 사용하여 폼 제출에 대한 응답으로 웹 페이지를 변경할 수 있습니다.
언급URL : https://stackoverflow.com/questions/7560837/proper-way-to-send-an-authenticity-token-with-ajax-to-rails
'itsource' 카테고리의 다른 글
jQuery에서 JSON 배열을 HTML 테이블로 변환 (0) | 2023.03.28 |
---|---|
리액트 컴포넌트에서 외부 Javascript 함수를 호출합니다. (0) | 2023.03.23 |
반응 유형 스크립트 - 유형의 인수를 유형의 매개 변수에 할당할 수 없습니다. (0) | 2023.03.23 |
Javascript의 Moment js를 사용하여 ISO 8601을 날짜 및 시간 형식으로 해석하는 방법은 무엇입니까? (0) | 2023.03.23 |
네스트된 ng-repeat (0) | 2023.03.23 |