2011-01-11 15 views
7

Per impostazione predefinita, devise utilizza un indirizzo di posta elettronica per registrarsi e accedere.Come modificare l'indirizzo email di un utente in modo "sicuro"?

Ma voglio che l'indirizzo di posta elettronica debba essere autorizzato a essere modificato dall'utente.

Se mi permettono all'utente di modificare l'indirizzo di posta elettronica, e l'utente specifica un "non corretta" (cioè un errore di battitura per errore) indirizzo e-mail e poi utente si disconnette, e l'utente dimentica anche ciò che il typo'ed E-mail era, ora l'account utente è inaccessibile dall'utente!

Come risolvere il problema? (eccetto per la creazione di un campo del nome utente separato e non modificabile che consentirà sempre all'utente di accedere)

risposta

12

È possibile forzare l'utente a confermare nuovamente il proprio account se cambia la sua e-mail.

Dopo aver aggiornato la password dell'utente interessato, è necessario annullare la conferma dell'utente e quindi inviare di nuovo l'e-mail di conferma.

Per unconfirm l'utente:

user = User.find(1) 
if user.confirmed? 
    user.confirmed_at = nil 
    user.save(:validate => false) 
end 

di inviare nuovamente l'email di conferma:

user = User.find(1) 
user.send_confirmation_instructions 

Spero che questo aiuto!

8

Devise fa questo fuori dalla scatola. Ecco le informazioni dal inizializzatore:

# If true, requires any email changes to be confirmed (exactly the same way as 
# initial account confirmation) to be applied. Requires additional unconfirmed_email 
# db field (see migrations). Until confirmed new email is stored in 
# unconfirmed email column, and copied to email column on successful confirmation. 
config.reconfirmable = true 

In confirmable module si può vedere come funziona.

+0

Molto probabilmente non è stato implementato nelle versioni precedenti di Devise (la versione attuale è la 3.2.2). – peresleguine

Problemi correlati