Ideare la reimpostazione della password dalla console di Rails


92

Durante l'esecuzione di un'app, come si seleziona un utente tramite indirizzo e-mail e quindi si imposta manualmente la password all'interno rails consoledi Devise?

Inoltre, dove dovrei andare a rivedere la documentazione per coprire maggiori dettagli in merito alla manipolazione degli account durante l'utilizzo di Devise?


Valk: where () non è disponibile fino a rails 3. Ma anche il modo in cui l'hai fatto va bene.
hellion

Risposte:


139

È più o meno come hai descritto :-)

# 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

Aggiornamento da 6 anni dopo :)

Il design moderno consente una sintassi più semplice, non è necessario impostare il campo di conferma

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

Ah, hmm. Funzionerebbe per un utente standard, ma in questo caso proviene dalla tabella admin_users. Qual è il tweak appropriato da estrarre da questa tabella rispetto agli utenti? Semplicemente impostandolo su user = AdminUser ... non ha funzionato.
illumina il

Umm, non lo so, interroghi il modello AdminUser? Per quanto mi riguarda, ho sempre memorizzato tutti gli utenti nelle stesse tabelle, con l'attributo "ruoli" assegnato.
Sergio Tulentsev

Puoi cambiare il nome della collezione a cui fa riferimento il modello con il metodo: store_in. Quindi, per cercare nella tabella admin_users dovresti aggiungere User.store_in 'admin_users' prima di quel codice. (questa risposta implica l'uso di Mongoid)
Sergio Tulentsev

Tentativo User.store_in 'admin_users'comunque ricevuto undefined method. Apparentemente non sono in grado di accedere al tavolo perché ricevo solo uno zero ogni volta. Che ne dici di interrogare l'intera tabella e ottenere inizialmente tutte le voci in essa contenute per verificare se sto entrando inizialmente in quella tabella? (Lavorare in MySQL qui, tuttavia non dovrebbe importare con ActiveRecord.)
ylluminate

: store_in è una parte di Mongoid gem. È possibile ottenere l'accesso al driver ruby ​​di livello inferiore chiamando 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
devise è cotto in rotaie quindi l'uso di pw confirm è ridondante. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

26

Se esegui quanto segue nella console di rails, dovrebbe funzionare:

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

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


6
Nota che il punto esclamativo è obsoleto, è solo:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy

1
Si noti inoltre che è necessario immettere una password valida che confermi i requisiti della password nella configurazione del dispositivo.
zwippie

5

Puoi semplicemente aggiornare il campo della password, non è necessaria la password di conferma, devise la salverà in forma crittografata

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

3

Per qualche motivo, (Rails 2.3 ??)

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

non ha funzionato per me, ma

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

fatto.


La ragione di ciò è che il where (); il metodo non era ancora in rails 2.3, in passato usavamo find (: all,: conditions => conditions).
dennis

3

1.Accedi alla console ralis

$ sudo bundle exec rails console production

2. Quindi aggiorna la password dell'amministratore

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.Aggiorna la pagina di accesso, usa la nuova password per accedere, divertiti!

In bocca al lupo!


devise è integrato in modo che l'uso della conferma pw sia ridondante. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

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

0

Se il tuo account è bloccato da troppi tentativi di accesso, potresti anche dover fare:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.