【问题标题】:migrating from legacy password to rails devise从旧密码迁移到 Rails 设计
【发布时间】:2011-01-31 03:21:51
【问题描述】:

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

【问题讨论】:

  • 试图发现纯文本密码可能是不道德的。 :)

标签: ruby-on-rails devise


【解决方案1】:

无耻地从:

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

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

【讨论】:

    猜你喜欢
    • 2012-10-18
    • 1970-01-01
    • 2013-07-26
    • 2012-06-02
    • 2015-02-04
    • 1970-01-01
    • 2012-10-10
    • 2013-05-07
    • 1970-01-01
    相关资源
    最近更新 更多