Wymyśl resetowanie hasła z konsoli Railsów

92

Jak podczas uruchamiania aplikacji wybrać użytkownika za pomocą adresu e-mail, a następnie ręcznie ustawić hasło w rails consoleDevise?

Ponadto, gdzie miałbym się udać, aby przejrzeć dokumentację, aby omówić więcej szczegółów dotyczących manipulacji kontami podczas korzystania z Devise?

ylluminate
źródło
Valk: gdzie () nie jest dostępne aż do rails 3. Ale sposób, w jaki to zrobiłeś, też jest w porządku.
hellion

Odpowiedzi:

140

Jest mniej więcej tak, jak opisałeś :-)

# 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

Aktualizacja sprzed 6 lat :)

Nowoczesne urządzenie pozwala na prostszą składnię, bez konieczności ustawiania pola potwierdzenia

user.password = new_password; user.save
# or
user.update_attributes(password: new_password)
Sergio Tulentsev
źródło
Ach, hmm. To zadziałałoby dla zwykłego użytkownika, ale w tym przypadku pochodzi z tabeli admin_users. Jaka jest odpowiednia poprawka do wyciągnięcia z tej tabeli w porównaniu z użytkownikami? Po prostu ustawienie user = AdminUser ... nie zadziałało.
ylluminate
Umm, nie wiem, zapytaj o model administratora? Jeśli chodzi o mnie, zawsze przechowywałem wszystkich użytkowników w tych samych tabelach, z przypisanym atrybutem „role”.
Sergio Tulentsev
Możesz zmienić nazwę kolekcji, do której odwołuje się model za pomocą metody: store_in. Tak więc, aby zajrzeć do tabeli admin_users, musisz dodać User.store_in 'admin_users' przed tym kodem. (ta odpowiedź sugeruje użycie Mongoida)
Sergio Tulentsev
Próbowano User.store_in 'admin_users'jednak otrzymać undefined method. Wygląda na to, że nie mogę uzyskać dostępu do tabeli, ponieważ za każdym razem zwracam zero. A co z odpytywaniem całej tabeli i początkowym pobraniem wszystkich wpisów, aby sprawdzić, czy początkowo wchodzę do tej tabeli? (Praca w MySQL tutaj, jednak nie powinno to mieć znaczenia w przypadku ActiveRecord.)
ylluminate
: store_in jest częścią klejnotu Mongoid. Możesz uzyskać dostęp do niższego (er) poziomu rubinowego sterownika, dzwoniąc do 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
źródło
1
urządzenie jest upieczone w szynach, więc użycie potwierdzenia pw jest zbędne. User.find_by_email('[email protected]').update_attributes(:password => 'password')
copremesis,
27

Jeśli uruchomisz następujące polecenie w konsoli railsów, powinno to załatwić sprawę:

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

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

gstraehle
źródło
6
Zauważ, że wykrzyknik jest przestarzały, to po prostu:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy
1
Pamiętaj również, że musisz wprowadzić prawidłowe hasło, które potwierdza wymagania dotyczące hasła w konfiguracji urządzenia.
zwippie
5

Możesz po prostu zaktualizować pole hasła, nie ma potrzeby potwierdzania hasła, urządzenie zapisze je w postaci zaszyfrowanej

u = User.find_by_email('[email protected]')
u.update_attribute(:password, '123123')
Kshitij
źródło
3

Z jakiegoś powodu (Rails 2.3 ??)

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

nie działa dla mnie, ale

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

zrobił to.

valk
źródło
Powodem tego jest to, że where (); metoda nie była jeszcze w rails 2.3, używaliśmy find (: all,: conditions => conditions) w dawnych czasach.
dennis
3

1. Zaloguj się do konsoli ralis

$ sudo bundle exec rails console production

2. Następnie zaktualizuj hasło administratora

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. Odśwież stronę logowania, użyj nowego hasła do logowania, baw się!

Powodzenia!

robinwen
źródło
urządzenie jest zapieczone, więc użycie potwierdzenia pw jest zbędne. User.find_by_email('[email protected]').update_attributes(:password => 'password')
copremesis
0

Jeśli Twoje konto zostało zablokowane z powodu zbyt wielu prób logowania, może być konieczne wykonanie następujących czynności:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Enzio
źródło