In meinen Entwicklungs- und Testumgebungen möchte ich die Datenbank mit einer Reihe von Benutzern säen. Ich verwende Ruby on Rails v3.2.8 und das neueste Devise. Also habe ich diese Zeile in meine db/seeds.rb-Datei eingefügt:
User.create(email: '[email protected]', encrypted_password: '#$taawktljasktlw4aaglj')
Beim Ausführen von rake db:setup
wird jedoch der folgende Fehler angezeigt:
rechen abgebrochen! Geschützte Attribute können nicht in Massen zugeordnet werden: encrypted_password
Was ist der richtige Weg, um Benutzer zu starten?
Das musst du so machen:
user = User.new
user.email = '[email protected]'
user.encrypted_password = '#$taawktljasktlw4aaglj'
user.save!
Lesen Sie dieses Handbuch, um die Massenzuordnung zu verstehen: http://guides.rubyonrails.org/security.html
Ich frage mich, warum das verschlüsselte Passwort direkt eingestellt werden muss. Sie könnten das tun:
user.password = 'valid_password'
user.password_confirmation = 'valid_password'
Arun hat recht. Es ist einfacher, dies nur in Ihrem seeds.rb zu tun
user = User.create! :name => 'John Doe', :email => '[email protected]', :password => 'topsecret', :password_confirmation => 'topsecret'
Die Bestätigungsmethode überspringen funktioniert nur, wenn in Ihrem Benutzermodell ein anpassungsfähiges Modul vorhanden ist
user = User.new(
:email => "[email protected]",
:password => "123456",
:password_confirmation => "123456"
)
user.skip_confirmation!
user.save!
Dies ist eine alte Frage, aber hier ist ein Beispiel mit einem Admin-Benutzer (von 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}
])
Wenn Sie das devise-Modul confirmable
verwenden, müssen Sie Folgendes tun:
user = User.new(
email: '[email protected]',
password: '123456789',
password_confirmation: '123456789'
)
user.skip_confirmation!
user.save!
Der skip_confirmation!
-Anruf teilt nur mit, dass Sie diesen Account nicht bestätigen müssen.
Eine andere Option setzt einfach das confirmed_at
Benutzerattribut vor dem Speichern auf Time.now.utc
.
So säen Sie die Benutzertabelle aus:
User.create(
email: "[email protected]",
password: "12345678"
)
Wenn devise installiert ist, wird der :password
automatisch gehasht und in :encrypted_password
gespeichert.
Ich weiß nicht, ob es helfen kann, aber eigentlich mache ich dies, um eine default Admin-Benutzer in meiner Rails 5 - App zu erstellen, ohne jedoch das Passwort in Klartext in meinem GitHub-Repository zu teilen.
Grundsätzlich ist die Logik dafür:
Also im db/seeds.rb
dieses anhängen:
randomPassword = Devise.friendly_token.first(8)
mainAdminUser = Admin.create!(email: "[email protected]", password: randomPassword, name: "Username")
Und wenn Sie die devise confirmable
-Funktion verwenden, überspringen Sie einfach die bestätigbare Option:
mainAdminUser = Admin.new(
email: "[email protected]",
password: randomPassword,
password_confirmation: randomPassword,
name: "Username"
)
mainAdminUser.skip_confirmation!
mainAdminUser.save!
Und ihr gut zu gehen!
Jetzt haben Sie einen Standardbenutzer, teilen aber kein Standardkennwort! Ich hoffe, es kann für jemanden nützlich sein.
Für Entwickler in der seeds.rb-Datei funktionierte für mich die Verwendung eines generischen Passworts beim Speichern des neuen Benutzers. Aktualisieren Sie dann das verschlüsselte Kennwort und speichern Sie das Modell erneut. Dies war eine harte Art und Weise.
user = User.new(
:email => "[email protected]",
:password => "fat12345",
:password_confirmation => "fat12345"
)
user.save!
user.encrypted_password="ENCRYPT.MY.ASS!!!KJASOPJ090923ULXCIULSH.IXJ!S920"
user.save
UPDATE, das andere gepostet haben, und dies ist der bessere Weg, dies zu tun:
user = User.new(
email: "[email protected]",
password: "foob1234",
password_confirmation: "foob1234"
)
user.skip_confirmation! #only if using confirmable in devise settings in user model.
user.save!
Ich habe etwas in einer meiner Anforderungen getan, also einfach meinen Ausschnitt eingefügt
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 => '[email protected]',
:password_confirmation => '[email protected]'
)
end
end
User.where('name LIKE ?', '%demo%').update_all(:is_admin => 0)
User.where('name LIKE ?', '%admin%').update_all(:is_admin => 1)
end
mit email Bestätigung in db: seed:
User.create!( name: 'John', email:'[email protected]', 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")
Dadurch können Sie einen Seed mehrmals ohne Fehler ausführen:
User.where(email: "[email protected]").first_or_create.update_attributes(nome: "Your Name",
email: "[email protected]",
password: "password#123",
password_confirmation: "password#123")
Verwenden Sie Ihre db/seeds.rb-Datei, um Ihren ersten Benutzer zu initiieren:
User.create!(email: '[email protected]',
password: '123456789',
password_confirmation: '123456789')
Fügen Sie einfach Folgendes hinzu: Kennwortattribut rest, devise übernimmt kennwort_encrypt
user = User.new({ email: '[email protected]', 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
und jetzt "rake db: seed" ausführen