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.