Entwickeln Sie das Passwort über die Rails-Konsole zurück


92

Wie wählen Sie beim Ausführen einer App einen Benutzer anhand der E-Mail-Adresse aus und legen das Kennwort manuell rails consolefür Devise fest?

Wohin sollte ich die Dokumentation lesen, um weitere Details in Bezug auf die Manipulation von Konten während der Verwendung von Devise zu erfahren?


Valk: where () ist erst auf Rails 3 verfügbar. Aber die Art und Weise, wie Sie es getan haben, ist auch in Ordnung.
Hellion

Antworten:


136

Es ist mehr oder weniger wie du beschrieben hast :-)

# use mongoid
class User
  include Mongoid::Document
end


# then
user = User.where(email: 'joe@example.com').first

if user
  user.password = new_password
  user.password_confirmation = new_password
  user.save
end

Update von 6 Jahren später :)

Moderne Geräte ermöglichen eine einfachere Syntax, ohne dass das Bestätigungsfeld festgelegt werden muss

user.password = new_password; user.save
# or
user.update_attributes(password: new_password)

Ah, hmm. Das würde für einen Standardbenutzer funktionieren, aber in diesem Fall stammt es aus der Tabelle admin_users. Was ist die geeignete Optimierung, um diese Tabelle gegen die Benutzer zu ziehen? Einfach auf user = AdminUser setzen ... hat nicht funktioniert.
ylluminate

Ähm, ich weiß nicht, AdminUser-Modell abfragen? Ich habe immer alle Benutzer in denselben Tabellen gespeichert, wobei das Attribut "Rollen" zugewiesen wurde.
Sergio Tulentsev

Sie können den Namen der Sammlung, auf die sich das Modell bezieht, mit der Methode store_in ändern. Um in der Tabelle admin_users nachzuschauen, müssen Sie User.store_in 'admin_users' vor diesem Code hinzufügen. (Diese Antwort impliziert die Verwendung von Mongoid)
Sergio Tulentsev

Versucht User.store_in 'admin_users'jedoch erhalten undefined method. Ich bin anscheinend nicht in der Lage, auf den Tisch zuzugreifen, da ich jedes Mal nur eine Null zurück bekomme. Was ist mit dem Abfragen der gesamten Tabelle und dem erstmaligen Abrufen aller darin enthaltenen Einträge, um zu testen, ob ich anfänglich in diese Tabelle komme? (Arbeiten in MySQL hier, aber das sollte mit
ActiveRecord

: store_in ist ein Teil des mongoiden Edelsteins. Sie können Zugriff auf Ruby-Treiber auf niedriger (er) Ebene erhalten, indem Sie User.db
Sergio Tulentsev

55
# $ rails console production
u=User.where(:email => 'usermail@gmail.com').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!

1
Das Gerät wird in Schienen gebacken, sodass die Verwendung der pw-Bestätigung überflüssig ist. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
Copremesis

26

Wenn Sie in der Rails-Konsole Folgendes ausführen, sollte dies den Trick ausführen:

User.find_by(email: 'user_email_address').reset_password!('new_password','new_password')

http://www.rubydoc.info/github/plataformatec/devise/Devise/Models/Recoverable


6
Beachten Sie, dass das Ausrufezeichen veraltet ist, es ist nur:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy

1
Beachten Sie auch, dass Sie ein gültiges Kennwort eingeben müssen , das die Kennwortanforderungen in Ihrer Gerätekonfiguration bestätigt.
Zwippie

5

Sie können das Passwortfeld einfach aktualisieren, ohne dass ein Bestätigungskennwort erforderlich ist. Das Gerät speichert es in verschlüsselter Form

u = User.find_by_email('user@example.com')
u.update_attribute(:password, '123123')

3

Aus irgendeinem Grund (Rails 2.3 ??)

user = User.where(:email => email).first

hat bei mir nicht funktioniert, aber

user = User.find_by_email('user@example.com')

geschafft.


Der Grund dafür ist, dass das where (); Methode war noch nicht in Rails 2.3, wir haben früher den Fund (: all ,: Bedingungen => Bedingungen) verwendet.
Dennis

3

1. Melden Sie sich bei der Ralis-Konsole an

$ sudo bundle exec rails console production

2. Aktualisieren Sie dann das Administratorkennwort

irb(main):001:0> user = User.where("username = 'root'")
irb(main):002:0> u = user.first
irb(main):003:0> u.password="root2014@Robin"
=> "root2014@Robin"
irb(main):004:0> u.password_confirmation="root2014@Robin"
=> "root2014@Robin"
irb(main):005:0> u.save
=> true
irb(main):006:0> exit

3. Aktualisieren Sie die Anmeldeseite, verwenden Sie das neue Passwort, um sich anzumelden, viel Spaß!

Viel Glück!


Das Gerät ist eingebrannt, sodass die Verwendung der pw-Bestätigung überflüssig ist. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
Copremesis

1
User.find_by_email('joe@example.com').update_attributes(:password => 'password')

0

Wenn Ihr Konto aufgrund zu vieler Anmeldeversuche gesperrt ist, müssen Sie möglicherweise auch Folgendes tun:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.