Как правильно перенести из has_secure_password в encrypted_password (как и использовать password_digest) без потери старых паролей?
Миграция из has_secure_password
для разработки вызывает следующую ошибку в консоли при взаимодействии с объектами пользователя:
.rvm/gems/ruby-2.4.1/gems/devise-4.4.0/lib/devise/models/database_authenticatable.rb:166:in `password_digest'
Я понимаю это потому, что devose использует функцию pasword_digest
и поэтому несовместим с столбцом password_digest
, используемым active record
has_secure password
.
Решение состоит в удалении столбца password_digest
из db, но я не хочу потерять пароли существующих пользователей.
Должен ли я удалить созданный конструктор столбца encrypted_password
, а затем выполнить переход для переименования password_digest
в encrypted_password
, а затем обновить существующие пароли пользователей или есть более подходящее решение?
Ответы
Ответ 1
Я раньше этого не делал. Но, на мой взгляд, попробуйте сначала создать резервную копию базы данных. Затем выполните миграцию, чтобы изменить пароль_digest на encrypted_password. Не волнуйтесь, потому что вы можете откатить свою миграцию, если она не работает.
Ответ 2
1 > Переименуйте столбец password_digest
в encrypted_password
.
2 > При разработке инициализатора в config/initializers/devise.rb
установите
config.stretches = 11 # this is default
3 > bcrypt
- это алгоритм хэширования или шифрования по умолчанию (поэтому изменений не требуется).
См. devise config template.
Ответ 3
Ваше предположение и решение Sachin верны. Переименуйте password_digest
в encrypted_password
, и он будет работать.
Вам не нужно менять config.stretches
для этого. Это влияет только на то, как devise
создает новые пароли. Существующий пароль хранит их количество растяжек в их хеше.