2012-07-31 4 views
8

Ho problemi con il token di autenticazione dei rails e Devise login/logout.Rails Autenticità del token CSRF e Devise

Sto utilizzando il backbone js per creare un'applicazione a singola pagina, quindi utilizzo ajax per accedere/disconnettersi dall'utente. Ecco cosa sto osservando e non capisco esattamente perché stia accadendo.

Ho csrf_meta_tags nel mio layout. la pagina viene caricata, faccio clic su un pulsante di accesso, compilo un modulo e lo invio, ho effettuato l'accesso con successo. Posso fare cose che un utente registrato dovrebbe essere in grado di fare.

Ora faccio clic su un pulsante di disconnessione che invia una richiesta DELETE tramite ajax e sono stato disconnesso correttamente.

Tutto il processo di cui sopra si trova su una singola pagina, nessun ricaricamento della pagina avviene tutto ajax.

Ora quando faccio nuovamente clic su accesso e compilo il modulo che invia la richiesta Ajax, mi registra ma mostra un messaggio di avviso sulla console del server.

WARNING: Can't verify CSRF token authenticity 

Ora perché esso (ideare) mi login, in primo luogo, se (binari) non ha potuto verificare l'autenticità CSRF token.

ed ora quando provo a fare le cose che un utente connesso deve essere in grado di farlo non riesce, la pubblicazione di una forma non riesce con messaggio di errore da concepire

401 Unauthorized {"error":"You need to sign in or sign up before continuing."} 

e un avvertimento sulla console del server

WARNING: Can't verify CSRF token authenticity 

ea questo punto sono entrato fuori, se mi aggiorna la pagina mi rendo conto che io non sono più collegato.

che cosa sta succedendo?

Il mio primo token di autenticità scade dopo essere stato disconnesso la prima volta?

Sto usando

rails (3.2.3) 
devise (2.1.0) 

Grazie in anticipo :)

+2

Esattamente lo stesso problema che sto avendo. Si prega di commentare se avete trovato la soluzione. Thx – vrepsys

+0

So perché il problema sta sorgendo. È perché il token csrf scade in signout e dal momento che è un sign_out basato su Ajax, la pagina non si ricarica e il nuovo token non entra nella pagina, causando quindi una mancata corrispondenza nella successiva richiesta. per ora sto ricaricando la pagina su sign_out per risolvere il problema. Qualcuno (potresti essere tu?) Pubblicato lo stesso sulla mailing list di Idea. Vediamo se possiamo ottenere qualcosa lì ... – Abid

+0

@Abid, ho avuto lo stesso errore con il mio vecchio progetto di rotaie, mi fa impazzire, hai trovato la soluzione? se ce l'hai, facci sapere, tkx – Neo

risposta

1

è necessario inviare authenticity_token variabile con tutte le vostre richieste Ajax. Puoi riempirlo dal meta tag della pagina.

+0

sta per essere inviato. il problema si verifica solo quando accedo per la seconda volta .. sembra che il token funzioni solo per una sessione – Abid