2012-04-02 11 views
6

Estoy desarrollando una aplicación Rails 3.0 y estoy usando OmniAuth + Identity para autenticar un registro. Implementé un modelo de usuario vinculado al modelo de identidad a través de una clave externa y todo funciona bien. Ahora, quiero implementar una característica de contraseña olvidada.OmniAuth + Identity Olvidé mi contraseña

Dado el correo electrónico de un usuario, deseo enviarles un correo electrónico con un enlace para restablecer su contraseña. El correo electrónico contiene una cadena hexadecimal al azar que está asociada con el usuario.

Ahora, ¿cómo restablezco la contraseña de identidad del usuario?

En la tabla de la base de datos Identity, se almacena como un password_digest. ¿Puedo simplemente sobrescribir esto?

Respuesta

4

Así que resulta que es así de simple. Simplemente sobrescriba el password_digest existente en la tabla de Identidad. Utilizar la biblioteca Bcrypt para crear el password_digest:

require 'bcrypt' 
... 
class UsersController < ApplicationController 
    ... 
    def update 
    @user = User.find(params[:id]) 
    ... 
    user_identity = Identity.find_by_email(@user.email) 
    unencrypted_password = params[:user][:password].to_s 
    password_digest = BCrypt::Password.create(unencrypted_password) 
    user_identity.password_digest = password_digest; 
    user_identity.save! 
    end 
end 
10

Haga lo siguiente:

@identity = Identity.find(1) 
@identity.password = "newpassword" 
@identity.password_confirmation = "newpassword" 
@identity.save 

En una de issue OmniAuth identidad, wdspkr dicen:

Una vez que entienda que OmniAuth-identidad es utilizando la SecurePassword de ActiveModel es realmente fácil de resolver. En lugar de configurar el password_digest, simplemente establece la contraseña y la confirmación de la contraseña y la actualización .

Cuestiones relacionadas