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?

ylluminate
quelle
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: '[email protected]').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)
Sergio Tulentsev
quelle
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 => '[email protected]').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!
Eric Guo
quelle
1
Das Gerät wird in Schienen gebacken, sodass die Verwendung der pw-Bestätigung überflüssig ist. User.find_by_email('[email protected]').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

gstraehle
quelle
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('[email protected]')
u.update_attribute(:password, '123123')
Kshitij
quelle
3

Aus irgendeinem Grund (Rails 2.3 ??)

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

hat bei mir nicht funktioniert, aber

user = User.find_by_email('[email protected]')

geschafft.

valk
quelle
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!

Robinwen
quelle
Das Gerät ist eingebrannt, sodass die Verwendung der pw-Bestätigung überflüssig ist. User.find_by_email('[email protected]').update_attributes(:password => 'password')
Copremesis
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!
Enzio
quelle