2011-09-01 2 views
10

CRUD를 위해 AJAX를 사용하는 컨트롤러가 있지만, 원격 링크 중 하나를 클릭 할 때마다 (예를 들어 삭제) 레일 서버가 나를 로그 아웃하고 리디렉션하기로 결정했습니다. 서버 로그를 검사하면 CSRF Authenticity를 확인할 수 없다고 나와 있습니다. 내 요청에 CSRF 토큰은 어떻게 포함합니까?개발자가 AJAX 요청시 로깅을 로깅합니다. Rails 3.1

실행 : 는 - 3.1 레일 - JQuery와 레일 1.0.13

관련 컨트롤러 액션 - 1.4.4 고안 :

def destroy 
    @article = Article.find(params[:id]) 
     if @article.destroy 
     flash[:notice] = "Article deleted." 
     respond_to do |format| 
     format.html{redirect_to articles_path} 
     format.js{} 
     end 
     else 
     flash[:error] = "Try Again." 
     redirect_to :back 
     end 

레이아웃/application.html.erb

 <head> 
    <title><%= content_for?(:title) ? yield(:title) : "Untitled" %></title> 
<link rel="stylesheet" href="http://twitter.github.com/bootstrap/assets/css/bootstrap-1.1.1.min.css> 
    <%= stylesheet_link_tag "application" %> 
    <%= javascript_include_tag :defaults %> 
    <script type="text/javascript">jQuery.ajaxSetup({ beforeSend: function (xhr) { xhr.setRequestHeader("Accept", "text/javascript"); } });</script> 
    <%= csrf_meta_tag %> 
    <%= yield(:head) %> 
    </head> 

미리 감사드립니다.

답변

8

레일 3.1은 당신이 당신의 application.js 파일이 가지고 싶어 보석 'JQuery와 레일'를 사용합니다.

+0

아, 이것도 내 문제를 해결했습니다. 감사! – neezer

4

당신은 당신의 HTML 페이지에서이 있어야한다 :

<%= csrf_meta_tag %> 

를 다음 생성하는 : 당신이 POST 할 때마다

<meta name="csrf-param" content="authenticity_token"/> 
<meta name="csrf-token" content="the token comes here"/> 

(DELETE가, PUT 의존적 실제로 POST하지만 _method 설정이다), 당신은 귀하의 게시물과 함께 데이터에 {authenticity_token: "the token comes here"}을 포함시켜야합니다. 나는 jquery_ujs을 잊고 있었던 당신과 같은 문제를 얻고 있었다

//= require jquery 
//= require jquery_ujs 

:

+0

그래, 당신 레이아웃에 있는지 확인하십시오. –

+0

그래도 이상한 부분입니다. –

+0

나는 application.html.erb –