2011-01-31 34 views
7

Estoy migrando de un sistema heredado que usa contraseñas simples MD5 sin saltos en Devise. Si bien podría pasar mi propio cifrador como se recomienda en el Devise wiki, en realidad quiero migrar al mecanismo de contraseña de bcrypt.migrando de la contraseña heredada a los carriles idear

Esto también parece más razonable que la descarga de tablas de arco iris y tratando de descubrir todas las contraseñas en texto plano ...

Por lo tanto, me pregunto si podría haber efectos secundarios en el código siguiente, especialmente alrededor de la ¡salvar! desencadenar cualquier devoluciones de llamada que tienen un comportamiento no deseado:

## 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

Tratar de descubrir las contraseñas de texto sin formato probablemente no sea ético de todos modos. :) – Rimian

Respuesta