从传统密码迁移到Rails Devise

7
我正在从使用简单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

试图发现明文密码可能无论如何都是不道德的。 :) - Rimian
1个回答

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接