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
Tratar de descubrir las contraseñas de texto sin formato probablemente no sea ético de todos modos. :) – Rimian