从旧密码迁移到rails设备

时间:2011-01-31 03:21:52

标签: ruby-on-rails devise

我正在从使用简单MD5无保留密码的遗留系统迁移到Devise。虽然我可以按Devise wiki上的建议推送自己的加密器,但实际上我想迁移到bcrypt密码机制。

这似乎比下载彩虹表并尝试发现所有明文密码更合理......

所以,我想知道下面的代码是否会有任何副作用,特别是在保存期间!触发任何具有意外行为的回调:

## config/initializers/legacy.rb
require 'bcrypt'
require 'digest/md5'

module Devise
  module Models
    module DatabaseAuthenticatable
      def valid_password?(password)
        if self.legacy_password_hash
          if ::Digest::MD5.hexdigest(password) == self.legacy_password_hash
            ## authenticated; now convert to bcrypt password
            self.password = password
            self.legacy_password_hash = nil
            self.save!
            return true
          else
            ## so that we don't get a bcrypt invalid hash exception
            return false
          end
        else
          return ::BCrypt::Password.new(self.encrypted_password) == "#{password}#{self.class.pepper}"
        end            
      end
    end
  end
end

1 个答案:

答案 0 :(得分:1)

无耻地被盗:

http://groups.google.com/group/plataformatec-devise/browse_thread/thread/9dcf87b2225bd11f?pli=1

简而言之,请勿覆盖Devise的默认身份验证。只需将此方法放入您的身份验证模型中(通常为User)。