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
Próba wykrycia zwykłych haseł tekstowych i tak prawdopodobnie byłaby nieetyczna. :) – Rimian