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

Can existing bcrypt hashes be manually inserted into a devise model?

我目前正在 Rails 上将具有已建立用户群的 PHP 应用程序移植到 Ruby。 Rails 应用程序正在使用 Devise 进行用户身份验证,而现有的 PHP 应用程序正在使用 bcrypt 对密码进行散列和加盐。据我所知,哈希值与 Devise 兼容。因此,我假设我可以通过以下方式手动将现有哈希分配给我的用户模型的 encrypted_password 字段:

User.create!([
    {
         first_name: 'Jim', 
         last_name: 'Bob', 
         encrypted_password: 'y$...', 
         email: 'abc@xyz.com'
    },
    ...
])

但是,当我尝试使用 rake db:seed 为数据库做种时,这会产生以下错误: ActiveRecord::RecordInvalid: Validation failed: Password can't be blank

有没有办法手动设置设计模型的 encrypted_password 字段,而不是求助于原始 SQL 语句?我希望我遗漏了一些明显的东西。

几天前我一直在做同样的事情。我做了这样的事情来导入旧用户:

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

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