In my development and test environments, I want to seed the database with a bunch of users. I\'m using Ruby on Rails v3.2.8 and the latest Devise. So I added this line in
I don't know if it may help but actually I'm doing this to create a default Admin user in my Rails 5 app but without sharing the password in plain text in my GitHub repository.
Basically the logic for this is:
So in the db/seeds.rb
append this:
randomPassword = Devise.friendly_token.first(8)
mainAdminUser = Admin.create!(email: "me@gmail.com", password: randomPassword, name: "Username")
And if you are using devise confirmable
feature just skip confirmable option by doing this:
mainAdminUser = Admin.new(
email: "me@gmail.com",
password: randomPassword,
password_confirmation: randomPassword,
name: "Username"
)
mainAdminUser.skip_confirmation!
mainAdminUser.save!
And your good to go!
Now you have a default user but you are not sharing a default password! I hope it could be useful for somebody.
Use your db/seeds.rb file to initiate your first user:
User.create!(email: 'palo@alto.com',
password: '123456789',
password_confirmation: '123456789')
To seed the users table:
User.create(
email: "example@gmail.com",
password: "12345678"
)
With devise installed, the :password
will be automatically hashed and saved to :encrypted_password
If you're using the devise confirmable
module you need to do something like:
user = User.new(
email: 'user@domain.com',
password: '123456789',
password_confirmation: '123456789'
)
user.skip_confirmation!
user.save!
The skip_confirmation!
call just tell to devise that you don't need to confirm this account.
Other option is just set the confirmed_at
user attribute as Time.now.utc
before save.
For devise users in seeds.rb file, what worked for me was to use a generic password upon saving the new user. Then update the encrypted password and save the model again. This was a hacky way.
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
UPDATE others have posted and this is better way to do it:
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!
This allows you to run a seed multiple times without errors:
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")