wake-up-neo.com

Benutzer mit Devise in Ruby on Rails suchen

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?

22
at.

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'
37

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'
25
George

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}
])
7
Koxzi

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.

5
Victor

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.

4
doncadavona

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:

  • Generieren Sie ein sicheres Zufallskennwort für den Standardbenutzer, wenn es sich um ein Seed handelt.
  • Gehen Sie zu ".../admins/sign_in" und klicken Sie auf"Passwort vergessen?"link zum RESET.
  • Rufen Sie den Link reset password in diesem Standard-E-Mail-Konto ab.
  • Legen Sie ein neues Passwort fest.

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.

3
Alex Ventura

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!
1
lacostenycoder

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
0
AnkitG

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")
0
vidur punj

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')
0
aloucas

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

0
Bilal A.Awan