Utilizziamo EngineYard Cloud per distribuire l'applicazione Ruby on Rails. Stiamo eseguendo Rails v2.3.3.- Token di autenticità non valido dopo la distribuzione
EngineYard Cloud distribuisce alle istanze AWS in modo simile a Capistrano. Dopo ogni distribuzione, stiamo eseguendo errori di token di autenticità non validi. In particolare, qualsiasi utente che ha precedentemente visitato la nostra applicazione e quindi visita dopo la distribuzione e quindi tenta di inviare un modulo riceve un errore di token di autenticità non valido. Questo errore persiste fino a quando non ripristinano i loro cookie per il sito. Dopo aver ripristinato i loro cookie, il sito funziona come previsto senza errori.
Stiamo utilizzando il negozio di sessione di ActiveRecord e le sessioni vengono salvate nel database.
Questo è l'errore che stiamo vedendo:
ActionController :: InvalidAuthenticityToken /usr/lib/ruby/gems/1.8/gems/actionpack-2.3.3/lib/action_controller/request_forgery_protection.rb: 79: in `verify_authenticity_token'
l'oggetto della sessione è pari a zero dopo l'implementazione, tuttavia, i dati della sessione persiste ancora nel database e l'ID del cookie di sessione esiste ancora:
Sessione:
- Session ID: nil
- dati: nil
non siamo stati in grado di spiegare questo. Qualche idea su quale potrebbe essere la causa principale?
Grazie per eventuali suggerimenti!
MODIFICA: solo per aggiornare su questo, siamo stati in grado di isolare un esempio dell'errore.
1) carichi di utenti formano 2) Codice viene aggiornato sul server di 3) l'utente invia modulo ** errore non valido autenticità provvisoria si verifica
Sembra che quando cambia l'ambiente, Rails è in grado di gestire questo con il token di autenticità.
Abbiamo provato diversi passaggi per risolvere:
- Ripristino della sessione
- Eliminazione del cookie di sessione (sia in JavaScript e Rails)
- Pulendo la tabella di sessione nel database dopo la distribuzione del codice
Niente funziona. L'unica cosa che funziona è che l'utente cancelli i cookie dal lato client.
(Siamo stati su Google (anche provato Binging!) Per le risposte, ma senza dadi.Questo sembra essere un problema simile: http://railsforum.com/viewtopic.php?id=21479)
Inoltre: inizialmente pensavamo che fosse isolato per la nostra implementazione su EngineYard, ma siamo anche riusciti a riprodurlo sul nostro server di sviluppo che distribuiamo su via Capistrano.
Qualsiasi pensiero sarebbe accettato con gratitudine.
Grazie!
Non ho tempo di cercare la risposta in questo momento, ma vorrai entrare nel sorgente Rails e vedere esattamente come viene generato il token di autenticazione. Può essere che il riavvio del server stia cambiando un valore che viene utilizzato per seminare quel token. – Rafe