2011-01-31 17 views
7

Przeprowadzam migrację z dotychczasowego systemu, który używa prostych niesynchronizowanych haseł MD5 do Devise. Chociaż mogłem przetasować własny koder zgodnie z zaleceniami na Devise wiki, faktycznie chcę, aby migrować do mechanizmu haseł bcrypt.migracja ze starego hasła do ruterów wymyślić

To również wydaje się bardziej uzasadnione niż pobieranie tęczowe tablice i próbuje odkryć wszystkie tekstu jawnego hasła ...

Więc zastanawiam się, czy nie może być żadnych skutków ubocznych do następującego kodu, zwłaszcza okolice zapisać! wywołując żadnych wywołań zwrotnych, które mają niezamierzone zachowanie:

## config/initializers/legacy.rb 
require 'bcrypt' 
require 'digest/md5' 

module Devise 
    module Models 
    module DatabaseAuthenticatable 
     def valid_password?(password) 
     if self.legacy_password_hash 
      if ::Digest::MD5.hexdigest(password) == self.legacy_password_hash 
      ## authenticated; now convert to bcrypt password 
      self.password = password 
      self.legacy_password_hash = nil 
      self.save! 
      return true 
      else 
      ## so that we don't get a bcrypt invalid hash exception 
      return false 
      end 
     else 
      return ::BCrypt::Password.new(self.encrypted_password) == "#{password}#{self.class.pepper}" 
     end    
     end 
    end 
    end 
end 
+0

Próba wykrycia zwykłych haseł tekstowych i tak prawdopodobnie byłaby nieetyczna. :) – Rimian

Odpowiedz