我需要种子与加密密码的用户,我不使用设计。 所以我尝试这样做:
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
但是,这些2场都是不明,因为他们不是在数据库中,所以我该怎么做才能加密种子的密码?
编辑
用户模型
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
你不需要为属性访问password
。 你得到的是免费的,当你使用has_secure_password
。
种子用户,我会建议使用哈特尔的办法从他的教程。
用户模型
添加用于生成密码手动消化的方法:
# 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')} )
在你的模型:
class User < ApplicationRecord
has_secure_password
end
在seeds.rb文件:
User.create(username: "username",
...
password_digest: BCrypt::Password.create('Your_Password'))
您可以创建密码,像下面的哈希:
require 'digest/sha1'
encrypted_password= Digest::SHA1.hexdigest(password)
您可以使用此代码在您的seeds.rb文件加密密码。 但似乎你已经写了一个方法encrypt_password
。 现在,你可以调用这个方法before_save
回调。 所以每一次,用户将被保存在数据库中, encrypt_password
将被调用。