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: "example@gmail.com",
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: ''test@example.com'', 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 => ''john@gmail.com'', :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 => "admin@xxxxx.xxx",
: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 => ''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
Tienes que hacer esto:
user = User.new
user.email = ''test@example.com''
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: ''palo@alto.com'',
password: ''123456789'',
password_confirmation: ''123456789'')
Esta es una vieja pregunta, pero aquí hay un ejemplo con un usuario administrador (de cancancan):
User.create!([
{email: "testadmin@mvmanor.co.uk", 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: "testuser@mvmanor.co.uk", 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: "testcustomer@customer.co.uk", 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 => "admin@xxxxx.xxx",
: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: ''user@domain.com'',
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: "me@gmail.com", password: randomPassword, name: "Username")
Y si está utilizando una característica confirmable
, simplemente omita la opción confirmable haciendo esto:
mainAdminUser = Admin.new(
email: "me@gmail.com",
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.