2011-01-11 11 views
7

Por defecto, devise utiliza una dirección de correo electrónico para Registrarse y abrir una sesión.¿Cómo cambiar la dirección de correo electrónico de un usuario de manera "segura"?

Pero quiero que la dirección de correo electrónico se debe permitir que ser cambiado por el usuario.

Si me permiten al usuario editar la dirección e-mail, y el usuario especifica una "incorrecta" (es decir, un error por error) dirección de correo electrónico y luego cierra la sesión, y el usuario también se olvida de lo que el typo'ed el correo electrónico era, ahora la cuenta de usuario es inaccesible para el usuario!

¿Cuál es la mejor solución para esto? (excepto para crear un campo de nombre de usuario separado, inmutable que siempre permitirá al usuario iniciar sesión)

Respuesta

12

Puede obligar al usuario a confirmar su cuenta nuevamente si cambia su correo electrónico.

Una vez que haya actualizado la contraseña del usuario en cuestión, debe anular la confirmación del usuario y luego volver a enviar el correo electrónico de confirmación.

Para unconfirm el usuario:

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

volver a enviar el correo electrónico de confirmación:

user = User.find(1) 
user.send_confirmation_instructions 

Esperanza esta ayuda!

8

Devise lo saca de la caja. Aquí está la información de la inicialización:

# 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 

En confirmable module puede ver cómo funciona.

+0

Lo más probable es que no se haya implementado en versiones anteriores del dispositivo (la versión actual es 3.2.2). – peresleguine

Cuestiones relacionadas