Monkey Patch Rails核心问题

时间:2012-08-16 13:45:46

标签: ruby ruby-on-rails-3 activemodel monkeypatching

我已经陷入了死胡同,而ActiveMassl的SecurePassword模型只执行bcrypt。 (我需要使用不同但同样安全的哈希来存储密码,以便导出和使用Dovecot IMAP身份验证的哈希密码。)

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

感谢您的提示!

1 个答案:

答案 0 :(得分: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,这一切都正常。)