可以将现有的bcrypt哈希手动插入到设计模型中吗?

时间:2015-08-18 19:32:24

标签: ruby-on-rails ruby devise

我目前正在将一个已建立用户库的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语句?我希望我能错过一些明显的东西。

1 个答案:

答案 0 :(得分:2)

前几天我一直在做同样的事情。我已经做了类似的事情来导入旧版用户:

user = User.initialize
user.assign_attributes(encrypted_password: old_encrypted_password, password_salt: old_salt)
user.save!(validate: false)

完美地工作 - 只需确保您的用户有效,您可以在保存后检查。