1

ActiveModel 的 SecurePassword 模型只做 bcrypt,我遇到了死胡同。(我需要使用不同但同样安全的哈希存储密码,以便导出和使用 Dovecot IMAP 身份验证的哈希密码。)

这对每个人来说可能都是一个有用的功能,所以我最终会把它做成一个补丁。但现在,我想给 SecurePassword 模块打补丁。但是,我不确定如何以这种方式解决这个问题,以确保在将问题包含在其他任何地方之前对其进行修补。

感谢您的提示!

4

1 回答 1

1

根据我的经验(至少使用 Rails 3.2,不能说早期版本,因为我上次使用 Rails 是在 2.x 天),最简单的入门方法是将代码保存到文件中,secure_password.rb例如config/initializers.

config/initializers/secure_password.rb中,您几乎可以侥幸逃脱,但在您的情况下,您可能想去:

module ActiveModel
  module SecurePassword
    module InstanceMethodsOnActivation
      def authenticate(unencrypted_password)
        # Replace calls to BCrypt here
      end

      def password=(unencrypted_password)
        # and here
      end
    end
  end
end

有关 Rails 初始化和配置的更多信息,请参阅http://guides.rubyonrails.org/configuring.html

(未经测试,但我已经ActiveRecord::Timestamp像那样打了猴子补丁,这一切都可以正常工作。)

于 2012-08-16T15:09:38.247 回答