Ruby on rails 在RubyonRails中为用户植入Desive
在我的开发和测试环境中,我想在数据库中加入一些用户。我正在使用RubyonRailsv3.2.8和最新的设计。因此,我在db/seeds.rb文件中添加了这一行:Ruby on rails 在RubyonRails中为用户植入Desive,ruby-on-rails,ruby-on-rails-3,devise,ruby-on-rails-3.2,seed,Ruby On Rails,Ruby On Rails 3,Devise,Ruby On Rails 3.2,Seed,在我的开发和测试环境中,我想在数据库中加入一些用户。我正在使用RubyonRailsv3.2.8和最新的设计。因此,我在db/seeds.rb文件中添加了这一行: User.create(email: 'test@example.com', encrypted_password: '#$taawktljasktlw4aaglj') 但是,当我运行rake db:setup时,我得到以下错误: 雷克流产了!无法批量分配受保护的属性: 加密密码 什么是种子用户的正确方法?您必须这样做: user
User.create(email: 'test@example.com', encrypted_password: '#$taawktljasktlw4aaglj')
但是,当我运行rake db:setup时,我得到以下错误:
雷克流产了!无法批量分配受保护的属性:
加密密码
什么是种子用户的正确方法?您必须这样做:
user = User.new
user.email = 'test@example.com'
user.encrypted_password = '#$taawktljasktlw4aaglj'
user.save!
阅读本指南了解什么是质量分配:
我想知道为什么要直接设置加密密码。您可以这样做:
user.password = 'valid_password'
user.password_confirmation = 'valid_password'
阿伦是对的。在种子中这样做更容易。rb
user = User.create! :name => 'John Doe', :email => 'john@gmail.com', :password => 'topsecret', :password_confirmation => 'topsecret'
我在我的一个需求中做了同样的事情,所以只是粘贴我的代码片段
def triggerSeedUsers
p "Starting Seeding Users..."
p "Deleting all users"..
User.destroy_all
normal_users = [{:email => 'abc@domain.com', :login => "abc_demo", :name => 'abc Demo'}]
admin_users = [{:email => 'admin@domain.com', :login => 'abc_admin', :name => 'abc Admin'}]
[normal_users,admin_users].each do |user_type|
user_type.each do |user|
User.create!(:name => user[:name],
:login => user[:login],
:email => user[:email],
:first_login => false,
:password => 'P@ssw0rd',
:password_confirmation => 'P@ssw0rd'
)
end
end
User.where('name LIKE ?', '%demo%').update_all(:is_admin => 0)
User.where('name LIKE ?', '%admin%').update_all(:is_admin => 1)
end
skip\u confirmation
方法仅在用户模型中有confirmatible
模块时有效,否则将其删除
user = User.new(
:email => "admin@xxxxx.xxx",
:password => "123456",
:password_confirmation => "123456"
)
user.skip_confirmation!
user.save!
使用db/seeds.rb文件启动第一个用户:
User.create!(email: 'palo@alto.com',
password: '123456789',
password_confirmation: '123456789')
这是一个老问题,但下面是一个管理员用户的示例(来自cancancan):
对于seeds.rb文件中的designe用户,对我来说有效的方法是在保存新用户时使用通用密码。然后更新加密密码并再次保存模型。这是一种令人讨厌的方式
user = User.new(
:email => "admin@xxxxx.xxx",
:password => "fat12345",
:password_confirmation => "fat12345"
)
user.save!
user.encrypted_password="ENCRYPT.MY.ASS!!!KJASOPJ090923ULXCIULSH.IXJ!S920"
user.save
更新其他人的帖子,这是更好的方法:
user = User.new(
email: "foo@bar.com",
password: "foob1234",
password_confirmation: "foob1234"
)
user.skip_confirmation! #only if using confirmable in devise settings in user model.
user.save!
要为用户表设置种子,请执行以下操作:
User.create(
email: "example@gmail.com",
password: "12345678"
)
安装后,
:password
将自动散列并保存到:encrypted_password
如果您使用的是designeconfirmable
模块,则需要执行以下操作:
user = User.new(
email: 'user@domain.com',
password: '123456789',
password_confirmation: '123456789'
)
user.skip_confirmation!
user.save!
跳过确认代码>打电话告诉我你不需要确认这个帐户。
另一个选项是在保存前将confirm_at
user属性设置为Time.now.utc
。我不知道这是否有帮助,但实际上我这样做是为了在我的Rails 5应用程序中创建一个默认管理员用户,但不在我的GitHub存储库中以明文形式共享密码
其基本逻辑是:
- 在设定种子时为默认用户生成安全的随机密码
- 转到“”../admins/sign_in”,然后单击“忘记密码?”链接重置密码
- 获取默认电子邮件帐户中的重置密码链接
- 设置新密码
因此在db/seeds.rb
中附加以下内容:
randomPassword = Devise.friendly_token.first(8)
mainAdminUser = Admin.create!(email: "me@gmail.com", password: randomPassword, name: "Username")
如果您正在使用designeconfirmable
功能,只需跳过confirmable选项即可:
mainAdminUser = Admin.new(
email: "me@gmail.com",
password: randomPassword,
password_confirmation: randomPassword,
name: "Username"
)
mainAdminUser.skip_confirmation!
mainAdminUser.save!
还有你的好去处
现在您有了一个默认用户,但您没有共享默认密码!
我希望它能对某些人有用。用db:seed进行电子邮件确认:
User.create!( name: 'John', email:'john@hotmail.com', password: '123456', password_confirmation: '123456',confirmed_at: '2018-08-04 04:51:43', current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1")
只需添加:密码属性rest,设计将为您做密码加密
user = User.new({ email: 'test@example.com', password: 'EnterYourPassword'})
user.save!
flash[:notice] = 'User Created'
#or for extra logic
#if user.save
#ExtraCredentialsOrLogic
#elsif user.errors.any?
#user.errors.full_messages.each do |msg|
#puts msg
#end
#else
#puts "****NOT VALID****"
#end
现在运行“rake db:seed”这允许您多次运行seed而不会出现错误:
User.where(email: "you@email.com").first_or_create.update_attributes(nome: "Your Name",
email: "you@email.com",
password: "password#123",
password_confirmation: "password#123")
不要试图创建加密的密码,要为你设计处理方法。这将起作用,只需确保密码长度至少为6个字符
User.create(
email: "test@test.com",
password: "123456"
)
更好的是,在您的终端中:
$bundle add faker
然后:
只要确保你在种子中至少设置了一封你能记住的电子邮件。因此保留了“测试”电子邮件。如果你是一群真正的用户,并且你有他们的电子邮件地址,你是否也会使用该密码,让他们更改一次密码,如果他们登录?如果你是一群真正的用户,并且你也有他们的电子邮件地址,你是否也会像那样植入他们的密码,并让他们在登录后更改密码?或者你会怎么做?在那里存储加密密码的想法是其他开发人员不知道实际的密码。这是一种(弱)形式的保护,防止项目源代码泄露后帐户被泄露。
$bundle add faker
User.create(
email: test@test.com,
password: "123456"
)
10.times do
User.create(
email: Faker::Internet.email,
password: "123456"
)
end