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?


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: 'joe@example.com').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)

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 => 'usermail@gmail.com').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!

1
urządzenie jest upieczone w szynach, więc użycie potwierdzenia pw jest zbędne. User.find_by_email('joe@example.com').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


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('user@example.com')
u.update_attribute(:password, '123123')

3

Z jakiegoś powodu (Rails 2.3 ??)

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

nie działa dla mnie, ale

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

zrobił to.


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!


urządzenie jest zapieczone, więc użycie potwierdzenia pw jest zbędne. 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

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!
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.