2011-04-22 2 views
2

요청과 함께 전송되지 않기 때문에 작동하지 삭제 : 요청이있는 페이지에 authenticity_token 덕분에 포함레일 3 간단한 아약스 authenticity_token가 나는 간단한 아약스는과 같이 요청을 삭제 제출하고

#invitation_actions 
    =link_to "delete", invitation_path(invitation), :method=>:delete, :remote=>true, :class=>"remove", :confirm=>'Are you sure you?' 

주 모든 페이지에 포함 된 csrf_meta_tag 태그

시작 DELETE 127.0.0.1에 대한 "/ 초대/5"2011-04-22 11시 21분 21초 -0700에서 : 나는 로그에서 볼 때

나는 삭제 요청이 authenticity_token 누락 된 것을 볼 수 InvitationsController 번호로 처리 매개 변수로 파괴 : { "아이디"=> "5"} 나는 제거하면 이제

나는 일반 페이지 삭제를로드 할 즉, 코드에서 "사실 : 원격 =>를" 로그 파일에 다음 내용이 표시됩니다.

2011 년 4 월 22 일 12시 52 분 19 초 -0700에 127.0.0.1에 POST "/ invitations/10"이 (가) 시작되었습니다. InvitationsController 번호로 처리 HTML 매개 변수로 파괴 : { "authenticity_token"=> "qlT8uX/WGQeOQSmVZzw1v8rFdSTHDRbzNY0zpSc9mV0 =", "ID"=> "5"}

왜 A는 AJAX의 경우에는 삭제되고 POST에서 AJAX가 아닌 경우? DELETE에 authenticity_token이 포함되지 않은 이유는 무엇입니까?

도움 주셔서 감사합니다.

답변

6

내가 생각할 수있는 가장 좋은 원인은 UJS 스크립트가 2 개월 이상 지난 경우 애플리케이션을 최신 버전으로 업데이트해야 응용 프로그램이 AJAX 요청과 함께 신뢰성 토큰.

동작의 변경은 모든 레일 UJS 스크립트를 업데이트했다는 것을 의미 2011 년 2 월에 발생

: 귀하의 질문의 두 번째 부분은 HTTP의 POST 동사에 대한 요청

http://groups.google.com/group/rubyonrails-security/browse_thread/thread/2d95a3cc23e03665

가에 사용되는 AJAX가 아닌 경우를 삭제하십시오. 이는 브라우저가 4 개의 HTTP 동사를 모두 구현하지 않으므로 Rails 양식 처리를 시뮬레이트해야하기 때문입니다. GET, POST, PUT & DELETE,이 동사가 HTML에서 유효하지 않기 때문에.

JavaScript (AJAX)는 AJAX 엔드 포인트로 보내는 헤더를 제어하기 때문에 실제 작업을 수행 할 수 있습니다.

+0

고마워요! 그게 효과가 있었어. 새로운 rails.js 파일이 문제를 해결합니다. –

1

<%= csrf_meta_tag %>을 응용 프로그램 레이아웃 파일의 <head> 태그 안에 추가해야합니다. 이 도우미는 jquery_ujs 스크립트가 유효한 POST 요청을 작성하는 데 필요한 몇 가지 추가 <meta> 태그를 추가합니다.