Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby Monkey Patch Rails核心关注点_Ruby_Ruby On Rails 3_Activemodel_Monkeypatching - Fatal编程技术网

Ruby Monkey Patch Rails核心关注点

Ruby Monkey Patch Rails核心关注点,ruby,ruby-on-rails-3,activemodel,monkeypatching,Ruby,Ruby On Rails 3,Activemodel,Monkeypatching,我遇到了一个死胡同,ActiveModel的SecurePassword模型只执行bcrypt。(我需要使用不同但同样安全的哈希值存储密码,以便导出和使用Dovecot IMAP auth的哈希密码。) 这对每个人来说都是一个有用的特性,所以我最终将把它开发成一个补丁。但是现在,我想对SecurePassword模块进行猴子补丁。然而,我不知道如何以这样的方式解决这个问题,以确保问题在被包括到其他任何地方之前得到解决 谢谢你的提示 根据我的经验(至少使用Rails 3.2,因为我上次使用Rail

我遇到了一个死胡同,ActiveModel的SecurePassword模型只执行bcrypt。(我需要使用不同但同样安全的哈希值存储密码,以便导出和使用Dovecot IMAP auth的哈希密码。)

这对每个人来说都是一个有用的特性,所以我最终将把它开发成一个补丁。但是现在,我想对SecurePassword模块进行猴子补丁。然而,我不知道如何以这样的方式解决这个问题,以确保问题在被包括到其他任何地方之前得到解决


谢谢你的提示

根据我的经验(至少使用Rails 3.2,因为我上次使用Rails是在2.x天内),最简单的入门方法是将代码保存到
secure\u 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初始化和配置的更多信息,请参阅


(未经测试,但我已经对
ActiveRecord::Timestamp
进行了猴子补丁,一切正常。)

根据我的经验,这是最简单的入门方法(至少对于Rails 3.2来说,因为我上次使用Rails是在2.x天内,所以不能说是早期版本)只需将代码保存到
config/initializers
下的文件中,如
secure\u password.rb

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初始化和配置的更多信息,请参阅


(未经测试,但我已经对
ActiveRecord::Timestamp
进行了monkey修补,一切正常。)

您是存储其他人的IMAP凭据,还是充当提供者并将密码哈希传递给Dovecot?后者,我必须导出用户名和散列密码对,以便让Dovecot将其作为passwd-file使用。您是存储其他人的IMAP凭据,还是充当提供者并将密码散列传递给Dovecot?后者,我必须导出用户名和散列密码对,让Dovecot将它们作为passwd文件使用。我没想到会这么容易,我自己也可以尝试:-)谢谢!我没想到会这么容易,我自己也可以试试:-)谢谢!