2012-06-22 46 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