从has_secure_password
迁移到devise会在与用户对象交互时在控制台中导致以下错误:
.rvm/gems/ruby-2.4.1/gems/devise-4.4.0/lib/devise/models/database_authenticatable.rb:166:in `password_digest'
我理解这是因为设计使用了pasword_digest
功能,因此它与password_digest
active record
使用的has_secure password
列不兼容。
解决方案是从数据库中删除password_digest
列,但我不想放弃现有用户'密码。
我应该删除已创建的encrypted_password
列设计,然后进行迁移以将password_digest
重命名为encrypted_password
,然后更新现有用户的密码,还是有更合适的解决方案?
答案 0 :(得分:4)
1>将列password_digest
重命名为encrypted_password
。
2 - ;在config/initializers/devise.rb
集合
config.stretches = 11 # this is default
3> bcrypt
是默认的散列或加密算法(因此无需更改)。
请参阅devise config template。
答案 1 :(得分:3)
我以前没有做过。但在我看来,让我们先尝试备份你的数据库。然后执行迁移以将password_digest更改为encrypted_password。不要担心,因为如果您的迁移无效,您可以回滚
答案 2 :(得分:2)
您的猜测和Sachin的解决方案是正确的。将memset()
重命名为password_digest
即可。
您不必为此更改encrypted_password
。它只影响config.stretches
生成新密码的方式。现有密码以散列形式存储它们的延伸数。