Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在RubyonRails中为用户植入Desive_Ruby On Rails_Ruby On Rails 3_Devise_Ruby On Rails 3.2_Seed - Fatal编程技术网

Ruby on rails 在RubyonRails中为用户植入Desive

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

在我的开发和测试环境中,我想在数据库中加入一些用户。我正在使用RubyonRailsv3.2.8和最新的设计。因此,我在db/seeds.rb文件中添加了这一行:

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
如果您使用的是designe
confirmable
模块,则需要执行以下操作:

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")
如果您正在使用designe
confirmable
功能,只需跳过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