2012-04-02 11 views
6

Sto sviluppando un'applicazione Rails 3.0 e sto utilizzando OmniAuth + Identity per l'autenticazione di una registrazione. Ho implementato un modello utente legato al modello Identity tramite una chiave esterna e tutto funziona correttamente. Ora, voglio implementare una funzione di password dimenticata.OmniAuth + Identity Password dimenticata

Data l'email di un utente, desidero inviare loro un'email con un collegamento per reimpostare la password. L'email contiene una stringa esadecimale casuale associata all'utente.

Ora, come si reimposta la password di identità dell'utente?

Nella tabella del database Identity, è memorizzato come password_digest. Posso sovrascrivere questo?

risposta

4

Quindi risulta così semplice. Basta sovrascrivere la password_digest esistente nella tabella Identità. Utilizzare la libreria bcrypt per creare il 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

Fate questo:

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

In una di issue omniauth-identità, wdspkr dicono:

Una volta capito che omniauth-identità è utilizzando ActiveModel's SecurePassword è davvero facile da risolvere. Invece di impostare password_digest è sufficiente impostare password e password_confirmation e aggiornamento .