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.