2011-09-12 4 views
7

Usando: Rails 3.0.7 Devise 1.4.5 jquery-rails 1.0.14Devise non impostando current_user su Ajax palo anche se corretta x-CSRF-token è incluso nella richiesta di intestazione

Quando la pubblicazione di dati tramite ajax, Devise non sta impostando current_donor.

La mia richiesta di intestazione si presenta così:

Host localhost:3000 
User-Agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:6.0) Gecko/20100101  Firefox/6.0 
Accept */* 
Accept-Language en-us,en;q=0.5 
Accept-Encoding gzip, deflate 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Connection keep-alive 
Content-Type application/x-www-form-urlencoded; charset=UTF-8 
X-Requested-With XMLHttpRequest 
x-csrf-token UFhqJrlOA1c1sAPeUTtV/ABcq5IeqkfA842ORcIWwks= 

All'interno della azione di controllo associata, guardando i valori di sessione, ho trovato il seguente:

{"_csrf_token"=>"UFhqJrlOA1c1sAPeUTtV/ABcq5IeqkfA842ORcIWwks=", "warden.user.donor.key"=>["Donor", [485], "$2a$10$OtkItrzVhN4Ussnqy5k1Au"], "session_id"=>"e6693e22275385a58e0915538791ea49"} 

Ciò indicherebbe a me che la csrf_token corrisponde al valore atteso. Tuttavia, current_donor rimane nullo.

Ho letto molti dei post su questo e, in effetti, il metodo csrf_meta_tag non era nel mio layout e il token csrf non veniva impostato.

Tuttavia, questo non è più il caso, il token csrf viene impostato, eppure sto ancora ottenendo alcun valore current_donor.

Quando faccio richiesta ajax, current_donor viene impostato correttamente.

Qualsiasi consiglio su quale altro dovrei guardare sarebbe molto apprezzato.

migliore, Tom

+1

Sto avendo lo stesso identico problema. L'hai risolto alla fine? – anders

+0

Stesso problema, Rails 4.1.6 e Devise 3.4.1. Qualche soluzione? – Frexuz

risposta

9

Ho avuto lo stesso problema prima. Ho risolto il problema includendo csrf_token come sotto

$.ajax({ 
    type: "GET", 
    url: url, 
    data: params , 
    beforeSend: function(jqXHR, settings) { 
     jqXHR.setRequestHeader('X-CSRF-Token', $('meta[name="csrf-token"]').attr('content')); 
    }, 
    error: function(){ 
     alert("An error ocurred"); 
    }, 
    success: function(){ 

    } 
}); 
Problemi correlati