2012-06-22 78 views
3

我的應用程序使用Devise gem進行身份驗證,但由於我以前的應用程序使用MD5,我想用兩個可能的加密密碼對其進行自定義。我在我的用戶表兩個字段:encrypted_pa​​sswordencrypted_old_password(我創建的),我想檢查是否存在價值encrypted_pa​​ssword,如果發送的密碼一組相匹配,否則,檢查它是否確實使用MD5,如果爲true,則替換值encrypted_pa​​ssword設計:使用兩種可能的加密密碼登錄

我該怎麼做?

+0

這裏有什麼問題? –

+0

「如果不登錄,然後用戶可以訪問,我如何構建」recover_old_password「以更新encrypted_pa​​ssword?」 –

+0

@markotom沒有得到問題 – Viren

回答

2

我不知道我的答案是否是幻想,但適用於我。我希望有人能改善我所做的。

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