Ruby Monkey Patch Rails核心关注点
我遇到了一个死胡同,ActiveModel的SecurePassword模型只执行bcrypt。(我需要使用不同但同样安全的哈希值存储密码,以便导出和使用Dovecot IMAP auth的哈希密码。) 这对每个人来说都是一个有用的特性,所以我最终将把它开发成一个补丁。但是现在,我想对SecurePassword模块进行猴子补丁。然而,我不知道如何以这样的方式解决这个问题,以确保问题在被包括到其他任何地方之前得到解决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
谢谢你的提示 根据我的经验(至少使用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文件使用。我没想到会这么容易,我自己也可以尝试:-)谢谢!我没想到会这么容易,我自己也可以试试:-)谢谢!