2011-09-01 6 views
10

Mam kontroler, który używa AJAX dla CRUD, jednak za każdym razem, gdy klikam na jeden z moich zdalnych linków (na przykład Usuń) widzę, że serwer szyn postanowił mnie wylogować i przekierować. Inspekcja dzienników serwera stwierdza, że ​​nie może zweryfikować autentyczności CSRF. Jak dołączyć token CSRF do mojej prośby?Wyrejestruj użytkownika logującego na żądanie AJAX. Rails 3.1

Bieg: - Rails 3.1 - Opracować 1.4.4 - jQuery szyn 1.0.13

Stosowna Controller Działanie:

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 

Layouty/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> 

Z góry dziękuję.

Odpowiedz

8

Rails 3.1 używa gem 'jQuery szyn', która chce, aby mieć to w pliku application.js:

//= require jquery 
//= require jquery_ujs 

I zapomniał jquery_ujs i był coraz ten sam problem jak ty.

+0

Ahh, to rozwiązało mój problem. Dzięki! – neezer

4

Należy mieć to na swojej stronie html:

<%= csrf_meta_tag %> 

który generuje następujące:

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

Kiedy robisz POST (DELETE, PUT są rzeczywiście POST ale z _method ustawić zależny) powinieneś dołączyć numer {authenticity_token: "the token comes here"} do danych, z którymi współpracujesz.

+0

Tak, upewnij się, że masz to w swoim układzie. –

+0

Tak, ale to dziwna część. –

+0

Dołączam głowę z application.html.erb –