2017-01-28 3 views
0

Codeigniter에서 AJX 호출 문제를 해결하려면 도움을 요청해야합니다. 내 시스템에서 CSRF 보호 기능을 사용하고 있으며 일반적으로 AJAX/jQuery 호출에서도 제대로 작동합니다. 이제 다음 코드를 사용하는 데 문제가있어서 해결할 수 없습니다. 그냥 큰 골칫거리가 있습니다. 내가하려는 것은 체크 박스 상태가 변경 될 때마다 컨트롤러를 호출하는 것입니다. Switchery 사용); 스위치를 여러 번 올바르게 작동시키고 싶습니다. 단지 첫 번째 스위치가 아닙니다. CSRF의 해시에 전달되지 않습니다,CSRF 코드 서명자 보호 및 AJAX 호출

\t \t \t $(document).ready(function() { 
 
\t \t \t var csrfName = '<?php echo $this->security->get_csrf_token_name(); ?>'; 
 
\t \t \t var csrfHash = '<?php echo $this->security->get_csrf_hash(); ?>'; 
 
\t \t \t var changeCheckbox = document.querySelector('.js-switch'), changeField = document.querySelector('#results'); 
 

 
\t \t \t changeCheckbox.onchange = function() { 
 
\t \t \t \t changeField.innerHTML = changeCheckbox.checked; 
 
\t \t \t  $.ajax({ 
 
\t \t \t   url: 'myphpfile', 
 
\t \t \t   type: 'POST',   
 
\t \t \t   data : { 
 
\t \t \t    csrfName: csrfHash, 
 
\t \t \t    "checked": changeCheckbox.checked 
 
\t \t \t   }, 
 
\t \t \t   dataType: "json", 
 
\t \t \t   success: function(result){ 
 
\t \t \t    $("#results").append(result.error); 
 
\t \t \t    csrfName = result.csrfHash; 
 
\t \t \t   } 
 
\t \t \t  }); 
 
\t \t \t }; 
 

 
\t \t \t });

스크립트는 위의 경우에도 첫 번째 시도에서 작동하지 않습니다와 나는 (금지)는 403 오류가 너무 : 자바 스크립트 코드는 다음과 같다 모든 .... .... 이것은 PHP 에코 코드를 사용하여 S.ajax 데이터 대괄호에 직접 csrf 이름과 csrf 해시를 설정하면 스크립트가 제대로 작동하기 때문에 정말 이상합니다. 질문은 다음과 같습니다. csrfName 및 csrfHash 변수가 데이터를 통해 전달되지 않는 이유는 무엇입니까? AJAX csrf가 여러 번 올바르게 작동하도록하려면 어떻게해야합니까? 다음

var data = {"checked": changeCheckbox.checked}; 
    data[csrfName] = csrfHash; 

과 :

$.ajax({ 
    url: 'myphpfile', 
    type: 'POST',   
    data : data 
[...] 

csrfName가 변수입니다 내 나쁜 영어, 희망 미안 도움이 아마

답변

0

에 대한 많은 당신이 의미하는 것은 내 문제를 감사를 설명 , 내용이 csrfName 인 속성을 추가하려면 object [variable] 구문을 사용해야합니다. 작성하여 :

data : { 
    csrfName: csrfHash 
} 

당신이 csrfName 재산이 아니라 그 내용과 객체를 만들 수 있습니다.

아니면 ES6를 사용하는 경우, 당신은 쓸 수 있습니다 : 당신은 Ajax 호출을 더 한 시간을 만들고있다

data : { 
    [csrfName]: csrfHash, 
    "checked": changeCheckbox.checked 
} 
+0

도움 document.querySelector'은 첫 번째 요소를 일치 반환'주의 것입니다 ... 모든이 – charlietfl

+0

고마워 일치 피드백 및 의견을. Adam, yout 힌트는 문제를 해결했습니다. 이제 첫 번째 확인란 스위치에서 스크립트가 제대로 작동합니다. csrfName = result.csrfHash를 편집해야합니까? 성공 함수를 한 번 더 작동하도록 행? – Federico

+0

그냥 제출 나는 PHP 스크립트로 JSON 코드 수익을 확인 ... 더 많은 정보를 추가하고 다음 POST에 대한 제대로 새로운 해시를 제공하는' csrfHash : "18911515b6521496f1dfcfa88bc5da6d" csrfName : "csrf_ats_name"' – Federico

0

참고하면 csrfhash을 보낼 단지 사용자 jquery.cookie 방법을 할 필요와 csrfcookie values.here에서 jquery.cookie https://github.com/js-cookie/js-cookie 을 다운로드하고 csrf 값을 ajax를 통해 다음과 같이 전달할 수 있습니다.

"data:<?php echo $this->security->get_csrf_token_name(); ?>": Cookies.get('csrf_cookie_name') 

그냥 당신에 이름을 쿠키 따라 csrf_cookie_name을 변경하고 아무 말 희망이 또한 당신에게