在种子文件中加密用户密码

时间:2015-06-24 12:13:37

标签: ruby-on-rails passwords

我需要使用加密密码为用户播种,我不使用Devise。所以我尝试了这个:

user = UserManager::User.new({ :name => 'a', :surname => 'a', :email => 'a', :active => true, :password_hash => 'password', :password_salt => 'password'})
user.save

但是这样输入password_hash和password_salt是不对的,我发现我必须输入密码和password_confirmation

user = UserManager::User.new({ :name => 'a', :surname => 'a', :email => 'a', :active => true, :password => 'password', :password_confirmation => 'password'})
user.save

但是这两个字段是未知的,因为它们不在数据库中,所以如何使用种子加密密码?

修改

用户模型

attr_accessor :password
has_secure_password
before_save :encrypt_password

def encrypt_password
  if password.present?
    self.password_salt = BCrypt::Engine.generate_salt
    self.password_hash = BCrypt::Engine.hash_secret(password, password_salt)
  end
end

3 个答案:

答案 0 :(得分:2)

您不需要password的属性访问者。使用has_secure_password时可以免费获得。

为了播种用户,我建议在他的教程中使用Hartl的方法。

用户模型

添加手动生成密码摘要的方法:

# Returns the hash digest of the given string.
def User.digest(string)
  cost = ActiveModel::SecurePassword.min_cost ? BCrypt::Engine::MIN_COST :
                                                BCrypt::Engine.cost
  BCrypt::Password.create(string, cost: cost)
end

种子文件

User.create!(name: 'foo',
             email: 'foo@bar.com',
             password_digest: #{User.digest('foobar')} )

答案 1 :(得分:1)

在你的模特中:

class User < ApplicationRecord
    has_secure_password
end

在seeds.rb文件中:

User.create(username: "username", 
     ...
password_digest: BCrypt::Password.create('Your_Password'))

答案 2 :(得分:0)

您可以创建密码哈希,如下所示:

require 'digest/sha1'
encrypted_password= Digest::SHA1.hexdigest(password)

您可以在seeds.rb文件中使用此代码来加密密码。但似乎你已经编写了一个方法encrypt_password。现在,您可以在before_save回调中调用此方法。因此,每次用户即将保存在数据库中时,将调用encrypt_password