Проблема шифрования пароля в Rails Devise gem - PullRequest
2 голосов
/ 16 августа 2010

В настоящее время я изменил использование Gem Devise для аутентификации пользователей.Но я не знаю, как сопоставить шифрование!

Я знал, что мы могли бы написать новый шифратор и назначить его в инициализаторах, но дело в том, что шифратор принимает только 4 аргумента (пароль, растяжение, соль,перец).Но в моем случае я включил электронную почту пользователя и настроенную соль в шифрование.

Можно ли передать электронную почту пользователя и настроенную соль в шифровщик?

ps.Я использую database_authenticatable

Ответы [ 2 ]

9 голосов
/ 23 августа 2010

Печально, что никто не ответил на мой вопрос ......

Тем не менее, я думаю, что нашел ответ, хотя он не так хорош, как я себе представлял.

Сначала создайте класс шифрования в инициализаторах:

module Devise
  module Encryptors
    class MySha1 < Base
      def self.digest(password, salt)
        Digest::SHA1.hexdigest("#{salt}-----#{password}")
      end

      def self.salt(email)
        Digest::SHA1.hexdigest("#{Time.now}-----#{email}")
      end
    end
  end
end

Во-вторых, переписать некоторые методы в модели User:

# overwrite this method so that we call the encryptor class properly
def encrypt_password
  unless @password.blank?
    self.password_salt = self.class.encryptor_class.salt(email)
    self.encrypted_password = self.class.encryptor_class.digest(@password, self.password_salt)
  end
end

# Because when the database_authenticatable wrote the following method to regenerate the password, which in turn passed incorrect params to the encrypt_password, these overwrite is needed!
def password=(password)
  @password = password
end
def password_digest(pwd)
  self.class.encryptor_class.digest(pwd, self.password_salt)
end

И, наконец, мы должны научить, когда шифровать пароль:

before_save :encrypt_password
0 голосов
/ 28 февраля 2012

Я не уверен, сколько ему лет, но кажется, что это лучший способ сделать это: http://presentations.royvandewater.com/authentication-with-devise.html#9

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...