2014-05-11 10 views

risposta

27

Quando si effettua il login a user (nome modello Devision User), viene creata una chiave "warden.user.model_name.key" che nel vostro caso è "warden.user.user.key".

Ad esempio:

{ warden.user.user.key => [[1], "$2a$10$KItas1NKsvunK0O5w9ioWu"] } 

dove

1 è la id del utente connesso.

$2a$10$KItas1NKsvunK0O5w9ioWu alias long-random-string è la parziale password crittografata di utente con id 1.

È possibile verificare questo andando su rails console e l'esecuzione di

User.find(1).encrypted_password 
## => "$2a$10$KItas1NKsvunK0O5w9ioWuWp4wbZ4iympYMqVCRmmvTGapktKqdMe" 

UPDATE

potrebbe dirmi un po 'di più su questa password crittografata parziale? perché è parziale e non pieno?

per rispondere alla tua domanda di cui sopra nel commento, Devise memorizza il parziale encrypted_password nella sessione invocando authenticatable_salt metodo. Devise memorizza il numero parziale encrypted_password in quanto è più affidabile piuttosto che esporre la password cifrata completa nella sessione (anche se è crittografata). Ecco perché i primi 30 caratteri [0,29] di encrypted_password vengono estratti e archiviati nella sessione.

# A reliable way to expose the salt regardless of the implementation. 
    def authenticatable_salt 
    encrypted_password[0,29] if encrypted_password 
    end 

È possibile visualizzare il codice per authenticatable_salt qui.

dove/quando viene utilizzato? è usato da Devise, o da Rails, o da entrambi?

È usato da Devise a scopo di autenticazione per verificare se un particolare utente è connesso. Ideale uso caso sarebbe, come una particolare applicazione Rails registra come un utente è collegato al momento è richiesta una nuova pagina Dal momento che le richieste HTTP sono stateless, sarebbe impossibile stabilire che una determinata richiesta provenga effettivamente da quel particolare utente che ha effettuato l'accesso? Questo è il motivo per cui le sessioni sono importanti in quanto consentirebbero all'applicazione di mantenere una traccia dell'utente connesso da una richiesta all'altra fino alla scadenza della sessione.

+0

grazie! potresti dirmi qualcosa in più su questa password parziale crittografata? perché è parziale e non pieno? dove/quando viene utilizzato?è usato da Devise, o da Rails, o da entrambi? –

+0

(o sentitevi liberi di indirizzarmi a un posto dove leggere su questo - ma non sono riuscito a trovare un buon spiegatore ovunque) –

+1

@JohnBachir Si prega di leggere la mia risposta aggiornata. Spero che ti aiuti a capire. –