Основные проблемы Monkey Patch Rails

Я зашел в тупик, когда модель SecurePassword ActiveModel выполняет только bcrypt. (Мне нужно хранить пароли с другим, но столь же безопасным хешем, чтобы экспортировать и использовать хешированные пароли для аутентификации Dovecot IMAP.)

Это может быть полезно для всех, так что в конце концов я переработаю ее в патч. Но прямо сейчас я хотел бы обезьяно пропатчить модуль SecurePassword. Однако я не уверен, как решить эту проблему таким образом, чтобы убедиться, что проблема обезьяна исправлена, прежде чем она будет включена где-либо еще.

Спасибо за подсказки!


person svoop    schedule 16.08.2012    source источник
comment
Вы храните чужие учетные данные IMAP или выступаете в роли провайдера и передаете хэш пароля в Dovecot?   -  person Robert K    schedule 16.08.2012
comment
В последнем случае мне нужно экспортировать пары имени пользователя и хешированного пароля, чтобы Dovecot использовал их как файл passwd.   -  person svoop    schedule 17.08.2012


Ответы (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

См. http://guides.rubyonrails.org/configuring.html для получения дополнительной информации об инициализации и настройке Rails. .

(Не тестировалось, но я просто вот так ActiveRecord::Timestamp пропатчил, и все работает.)

person Alistair A. Israel    schedule 16.08.2012
comment
Я не ожидал, что это будет так просто, мог бы попробовать сам :-) Спасибо! - person svoop; 19.08.2012