2011-09-01 14 views
10

Ho un controller che usa AJAX per CRUD, tuttavia ogni volta che clicco su uno dei miei collegamenti remoti (Elimina per esempio) vedo che il server dei binari ha deciso di disconnettermi e reindirizzarmi. L'ispezione dei log del server indica che non è possibile verificare l'autenticità CSRF. Come posso includere il token CSRF nella mia richiesta?Devise Logging Utente su richiesta AJAX. Rails 3.1

Esecuzione: - Rails 3.1 - Definire 1.4.4 - jquery-rails 1.0.13

Azione controller Rilevante:

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 

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

Grazie in anticipo.

risposta

8

Rails 3.1 utilizza la gemma 'jquery-rails', che vuole che tu abbia questo nel file application.js:

//= require jquery 
//= require jquery_ujs 

avevo dimenticato le jquery_ujs e stava ottenendo lo stesso problema come te.

+0

Ah, questo ha risolto anche il mio problema. Grazie! – neezer

4

Si dovrebbe avere questo nella pagina HTML:

<%= csrf_meta_tag %> 

che genera il seguente:

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

Ogni volta che si fa POST (DELETE, PUT sono in realtà POST ma con _method set dipendente), dovresti includere lo {authenticity_token: "the token comes here"} nei dati con il tuo post.

+0

Sì, assicurati di averlo nel tuo layout. –

+0

Lo faccio però, questa è la parte strana. –

+0

Ho incluso la testa da application.html.erb –