Используя шифровщик bcrypt в Devise, я закончил тем, что делал со своими прежними данными:
В моделях / user.rb
# Because we have some old legacy users in the database, we need to override Devises method for checking if a password is valid.
# We first ask Devise if the password is valid, and if it throws an InvalidHash exception, we know that we're dealing with a
# legacy user, so we check the password against the SHA1 algorithm that was used to hash the password in the old database.
alias :devise_valid_password? :valid_password?
def valid_password?(password)
begin
devise_valid_password?(password)
rescue BCrypt::Errors::InvalidHash
Digest::SHA1.hexdigest(password) == encrypted_password
end
end
Как вы можете видеть, devise генерирует исключение InvalidHash при обнаружении недопустимого хеша, что происходит при аутентификации унаследованного пользователя.
Я использую это для возврата к алгоритму хеширования, используемому для создания оригинального старого хэша.
Хотя пароль не изменяется, но его можно просто добавить к методу, если это необходимо.