我目前正在将一个已建立用户库的PHP应用程序移植到Ruby on Rails。 Rails应用程序正在使用Devise
进行用户身份验证,而现有的PHP应用程序正在使用bcrypt
来对密码进行哈希处理。据我所知,哈希与Devise兼容。因此,我假设我可以通过以下方式手动将现有哈希值分配给用户模型的encrypted_password
字段:
User.create!([
{
first_name: 'Jim',
last_name: 'Bob',
encrypted_password: '$2y$10$...',
email: 'abc@xyz.com'
},
...
])
但是,当我尝试使用rake db:seed
为数据库设定种子时,会产生以下错误:
ActiveRecord::RecordInvalid: Validation failed: Password can't be blank
有没有办法手动设置设计模型的encrypted_password
字段,而不是诉诸原始SQL语句?我希望我能错过一些明显的东西。
答案 0 :(得分:2)
前几天我一直在做同样的事情。我已经做了类似的事情来导入旧版用户:
user = User.initialize
user.assign_attributes(encrypted_password: old_encrypted_password, password_salt: old_salt)
user.save!(validate: false)
完美地工作 - 只需确保您的用户有效,您可以在保存后检查。