如何在不丢失旧密码的情况下从has_secure_password正确迁移到encrypted_pa​​ssword(因为两者都使用password_digest)?

Ayr*_*rad 13 ruby ruby-on-rails devise ruby-on-rails-4.2

has_secure_password用户对象进行交互时,从设置迁移会导致控制台中出现以下错误:

.rvm/gems/ruby-2.4.1/gems/devise-4.4.0/lib/devise/models/database_authenticatable.rb:166:in `password_digest'
Run Code Online (Sandbox Code Playgroud)

我理解这是因为devise使用了这个pasword_digest函数,所以它与's 使用的password_digest列不兼容.active recordhas_secure password

解决方案是password_digest从数据库中删除列,但我不想丢失现有用户的密码.

我应该删除encrypted_password创建的列设计,然后进行迁移以重命名password_digestencrypted_password然后更新现有用户的密码,还是有更合适的解决方案?

Sac*_*ngh 6

1>将列重命名password_digestencrypted_password

2>在色器件在初始config/initializers/devise.rb

config.stretches = 11 # this is default
Run Code Online (Sandbox Code Playgroud)

3> bcrypt是默认的哈希或加密算法(因此无需更改)。

请参阅devise配置模板


Wil*_*yen 3

我以前没做过。但在我看来,让我们先尝试备份数据库。然后执行迁移,将password_digest更改为encrypted_pa​​ssword。不用担心,因为如果迁移不起作用,您可以回滚迁移