Domanda

Sto usando la versione corrente di restful_authentication che si trova su github e sto riscontrando un sacco di strani problemi di sessione. Il server sembra in qualche modo assegnare sessioni agli utenti che non dovrebbe essere. Ciò accade solo quando si attraversa la barriera di accesso / disconnessione.

Ecco un esempio. Senza sessioni attive sul server, eseguo l'accesso a un account con l'utente A. Su un'altra macchina, eseguo l'accesso con l'utente B. Quindi, quando esco dall'utente B, qualche volta dopo che si verifica il reindirizzamento della disconnessione, accederò come utente A. Da questo punto, posso continuare a navigare nel sito come se avessi effettuato l'accesso come tale utente! Qualcosa che ho osservato tramite i registri è che quando si verifica questo dirottamento, gli ID di sessione non sono gli stessi. L'utente A ha effettuato l'accesso in entrambe le sessioni, ma gli ID sessione sono completamente diversi. Questo è solo un esempio di ciò che potrebbe accadere. Non riesco a riprodurre il problema in modo affidabile poiché è apparentemente casuale.

Non sembra essere un sintomo dell'ambiente o del server su cui è in esecuzione. Posso riprodurre il problema usando sia ibrido che passeggero. L'ho visto anche in sviluppo e produzione. Sto usando sessioni basate su db in questa applicazione ed è in esecuzione su Rails 2.1.1. Ho applicato l'opzione stateful quando ho chiamato il generatore. Altrimenti non sono state apportate altre modifiche al modo in cui vengono gestite le sessioni.

Aggiornamento Ecco il metodo offensivo derivante direttamente da restful_authentication.

# Accesses the current user from the session.
# Future calls avoid the database because nil is not equal to false.
def current_user
  @current_user ||= (login_from_session || login_from_basic_auth || login_from_cookie) unless @current_user == false
end
È stato utile?

Soluzione 2

Non so se questa è una risposta tanto quanto una soluzione. Tutto quello che ho fatto è stato passare a sessioni basate su cookie e tutto funziona senza problemi.

Altri suggerimenti

Questo può accadere se tu (o coloro che hanno scritto restful_authentication) stai memorizzando nella cache l'utente corrente in una variabile di classe. Ho visto un sacco di articoli a sostegno dell'uso di " User.current_user " ;, ma poiché le classi sono memorizzate nella cache tra le richieste, ciò può causare il contaminazione della sessione.

Questo sito è remoto? Stai accedendo ad esso su due computer separati sulla stessa rete?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top