tutorial rails instalar hacer como ruby-on-rails ruby-on-rails-3 devise ruby-on-rails-3.2 seed

ruby-on-rails - instalar - rails use devise



Sembrando usuarios con Devise en Ruby on Rails (10)

Para sembrar la tabla de usuarios:

User.create( email: "[email protected]", password: "12345678" )

Con el dispositivo instalado, la :password :encrypted_password automáticamente y se guardará en :encrypted_password :password :encrypted_password

En mis entornos de desarrollo y prueba, quiero sembrar la base de datos con un grupo de usuarios. Estoy usando Ruby on Rails v3.2.8 y el último Devise. Así que agregué esta línea en mi archivo db / seeds.rb:

User.create(email: ''[email protected]'', encrypted_password: ''#$taawktljasktlw4aaglj'')

Sin embargo, cuando ejecuto rake db:setup , aparece el siguiente error:

rake abortado! No se pueden asignar en masa los atributos protegidos: encrypted_password

¿Cuál es la forma correcta de sembrar usuarios?


Arun tiene razón. Es más fácil simplemente hacer esto en tus semillas.rb

user = User.create! :name => ''John Doe'', :email => ''[email protected]'', :password => ''topsecret'', :password_confirmation => ''topsecret''


El método de omisión de confirmación solo funcionará si tiene un módulo adaptable en su modelo de usuario, de lo contrario, quítelo

user = User.new( :email => "[email protected]", :password => "123456", :password_confirmation => "123456" ) user.skip_confirmation! user.save!


Hice algo igual en uno de mis requisitos, así que solo pegué mi fragmento

def triggerSeedUsers p "Starting Seeding Users..." p "Deleting all users".. User.destroy_all normal_users = [{:email => ''[email protected]'', :login => "abc_demo", :name => ''abc Demo''}] admin_users = [{:email => ''[email protected]'', :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


Tienes que hacer esto:

user = User.new user.email = ''[email protected]'' user.encrypted_password = ''#$taawktljasktlw4aaglj'' user.save!

Lea esta guía para comprender qué es la asignación masiva: http://guides.rubyonrails.org/security.html

Me pregunto por qué tengo que configurar directamente la contraseña cifrada. Podrías hacer esto:

user.password = ''valid_password'' user.password_confirmation = ''valid_password''


Use su archivo db / seeds.rb para iniciar su primer usuario:

User.create!(email: ''[email protected]'', password: ''123456789'', password_confirmation: ''123456789'')


Esta es una vieja pregunta, pero aquí hay un ejemplo con un usuario administrador (de cancancan):

User.create!([ {email: "[email protected]", password: "testadminuser", password_confirmation: "testadminuser", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-02-06 14:02:10", last_sign_in_at: "2015-02-06 14:02:10", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: true}, {email: "[email protected]", password: "testuseraccount", password_confirmation: "testuseraccount", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-02-06 14:03:01", last_sign_in_at: "2015-02-06 14:03:01", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false}, {email: "[email protected]", password: "testcustomeruser", password_confirmation: "testcustomeruser", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2015-02-06 14:03:44", last_sign_in_at: "2015-02-06 14:03:44", current_sign_in_ip: "127.0.0.1", last_sign_in_ip: "127.0.0.1", admin: false} ])


Para diseñar usuarios en el archivo seeds.rb, lo que funcionó para mí fue utilizar una contraseña genérica al guardar el nuevo usuario. Luego actualice la contraseña encriptada y guarde el modelo nuevamente.

user = User.new( :email => "[email protected]", :password => "fat12345", :password_confirmation => "fat12345" ) user.save! user.encrypted_password="ENCRYPT.MY.ASS!!!KJASOPJ090923ULXCIULSH.IXJ!S920" user.save


Si está utilizando el módulo confirmable diseño, necesita hacer algo como:

user = User.new( email: ''[email protected]'', password: ''123456789'', password_confirmation: ''123456789'' ) user.skip_confirmation! user.save!

El skip_confirmation! solo llame para decirle que no necesita confirmar esta cuenta.
Otra opción es simplemente configurar el atributo de usuario Time.now.utc como Time.now.utc antes de guardar.


No sé si puede ser útil, pero en realidad estoy haciendo esto para crear un usuario administrador predeterminado en mi aplicación Rails 5 pero sin compartir la contraseña en texto plano en mi repositorio GitHub.

Básicamente, la lógica para esto es:

  • Genere una contraseña aleatoria segura para el usuario predeterminado cuando se siembra.
  • Vaya a "... / admins / sign_in" y haga clic en "¿ Ha olvidado su contraseña?" enlace para RESETEARLO.
  • Obtenga el enlace de restablecimiento de contraseña en esa cuenta de correo electrónico predeterminada.
  • Establecer una nueva contraseña

Entonces, en db/seeds.rb agregue esto:

randomPassword = Devise.friendly_token.first(8) mainAdminUser = Admin.create!(email: "[email protected]", password: randomPassword, name: "Username")

Y si está utilizando una característica confirmable , simplemente omita la opción confirmable haciendo esto:

mainAdminUser = Admin.new( email: "[email protected]", password: randomPassword, password_confirmation: randomPassword, name: "Username" ) mainAdminUser.skip_confirmation! mainAdminUser.save!

Y es bueno que te vayas!

¡Ahora tiene un usuario predeterminado pero no está compartiendo una contraseña predeterminada! Espero que pueda ser útil para alguien.