Sto migrando da un sistema legacy che utilizza semplici password MD5 non modificate in Devise. Mentre potrei eseguire il rollover del mio codificatore come consigliato su Devise wiki, desidero effettivamente effettuare il migrazione del meccanismo di password bcrypt.migrazione da password legacy a rotaie ideato
Questo sembra anche più ragionevole che scaricare tabelle arcobaleno e cercando di scoprire tutte le password in chiaro ...
Quindi, mi chiedo se ci potrebbe essere effetti collaterali al seguente codice, in particolare attorno alla salvare! innescando qualsiasi callback che hanno un comportamento intenzionale:
## 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
Cercare di scoprire password di testo in chiaro sarebbe probabilmente immorale. :) – Rimian