2013-05-06 13 views
20

In qualche punto misterioso X con questa app per rails ospitata su heroku, un utente che ha effettuato l'accesso si collegherà improvvisamente come un altro utente. Sto usando la gemma devise per l'autenticazione.Come posso ripristinare tutte le sessioni di sviluppo in modo che ogni utente debba effettuare nuovamente il login?

Si è verificato per 2 utenti di cui siamo a conoscenza. Attualmente sto rintracciando quale potrebbe essere la causa principale di questo problema.

Quello che devo fare in questo momento è invalidare tutte le sessioni di sviluppo per costringere gli utenti ad accedere nuovamente. Dopo che un utente ha effettuato l'accesso, il problema sembra scomparire.

Ho provato a resettare il mio secret_token ma non ero obbligato a effettuare nuovamente il login. Quindi ho ridimensionato i miei dynos Web e poi ripristinato. Ho anche riavviato l'app. Tutti cercano di ottenere il cambio secret_token per resettare le sessioni.

Altre idee?

+0

Hai provato timeout di sessione? E 'uno dei moduli Devise – kasperite

risposta

14

Modifica della session_token funzionerà se siete memorizzare le sessioni nei cookie (impostazione predefinita).

Ma se stai memorizzazione in active_record, allora è possibile eliminare tutte le sessioni da:

rake db:sessions:clear 

poi: BAM! non più sessioni.

+0

Il negozio seduta è stata commutata su record attivo. Quindi il rake: db: sessions: clear ha risolto il problema. –

+6

non importa come lo provo, sto ricevendo un "non so come costruire taks" .. Qualche suggerimento? –

+1

@TheMiniJohn letteralmente "tak"? –

1

Partenza

module ClassMethods 
    Devise::Models.config(self, :timeout_in) 
    end 

sto solo indovinando che si potrebbe fare qualcosa di simile:

User.all.each do |user| 
    user.timeout_in 1.second 
end 

Ma io non sono sicuro se questo riesce solo nuove sessioni .. e quelli non esistenti ?

In realtà questo è eccessivamente complessa .. Basta provare:

User.all.each do |user| 
    sign_out user 
end 

vedi questo post Log out all user with Devise

a fare qualcosa di simile dalla console è necessario per vedere questo esempio e regolarlo per il vostro ha bisogno di

How to sign in a user using Devise from a Rails console?

4

Se le sessioni non memorizzano tutte le altre informazioni critiche, è possibile cancellare le s essions:

rake db:sessions:clear 
19

Dovreste essere in grado di cambiare la sessione nome del cookie per invalidare tutte le sessioni, che vive in config/inizializzatori/session_store.rb

YourApp::Application.config.session_store :cookie_store, key: '_change_me_session' 
+2

Questa è l'unica soluzione che ha funzionato (usando Heroku Postgres + Rails +) – Onichan

1

Aggiornamento sulla risposta accettata, ora è

rake tmp:clear

rake -T ... rake tmp:create # Creates tmp directories for sessions, cache, sockets, and pids

Problemi correlati