2011-01-31 14 views
7

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 
+0

Cercare di scoprire password di testo in chiaro sarebbe probabilmente immorale. :) – Rimian

risposta