2012-06-22 1 views
3

Mon application fonctionne avec la gemme Devise pour l'authentification, mais je veux la personnaliser pour se connecter avec deux mots de passe cryptés possibles, en raison de mon ancienne application a travaillé avec MD5. J'ai deux champs dans ma table d'utilisateurs: encrypted_password et encrypted_old_password (je l'ai créé), je veux vérifier si la valeur existe encrypted_password et si le mot de passe envoyé correspond à celui défini, sinon, vérifier si elle ne avec MD5 et si la valeur est true, remplacez la valeur encrypted_password.Devise: connectez-vous avec deux mots de passe cryptés possibles

Comment je fais ça?

+0

Quelle est la question ici? –

+0

"comment puis-je créer" recover_old_password "pour mettre à jour encrypted_password si je ne me connecte pas et que l'utilisateur peut y accéder?" –

+0

@markotom N'avez pas la question – Viren

Répondre

2

Je ne sais pas si ma réponse est chic, mais elle fonctionne pour moi. J'espère que quelqu'un peut améliorer ce que j'ai fait.

class SessionsController < Devise::SessionsController 

    def create 
    recover_old_password unless user_signed_in? 

    resource = warden.authenticate! auth_options 
    set_flash_message(:notice, :signed_in) if is_navigational_format? 
    sign_in resource_name, resource 

    respond_with resource, :location => after_sign_in_path_for(resource) 
    end 

    def recover_old_password 

    email = params[:user]['email'] 
    pass = Digest::MD5.hexdigest params[:user]['password'] 

    @user = User.find_by_email_and_encrypted_old_password(email, pass) 

    if @user.blank? 

     resource = warden.authenticate! auth_options 
     respond_with resource, :location => after_sign_in_path_for(resource) 

    elsif 

     if [email protected]_password.nil? 
     @user.encrypted_password = BCrypt::Password.create params[:user]['password'] 
     @user.save 
     create 
     end 

    end 

    end 

end 
Questions connexes