Сброс пароля из консоли Rails

Как при запуске приложения выбрать пользователя по адресу электронной почты, а затем вручную установить пароль в rails console для Devise?

Кроме того, где я могу просмотреть документацию, чтобы получить более подробную информацию о манипуляциях с учетными записями при использовании Devise?


person ylluminate    schedule 29.11.2011    source источник
comment
Valk: where () недоступен до rails 3. Но то, как вы это сделали, тоже нормально.   -  person hellion    schedule 25.08.2012


Ответы (7)


Современное устройство позволяет упростить синтаксис, не нужно устанавливать поле подтверждения

user.password = new_password; user.save
# or
user.update(password: new_password)
person Sergio Tulentsev    schedule 29.11.2011
comment
Ах, хм. Это будет работать для обычного пользователя, но в данном случае это из таблицы admin_users. Какую настройку можно извлечь из этой таблицы по сравнению с пользователями? Простая установка его на user = AdminUser ... не сработала. - person ylluminate; 29.11.2011
comment
Умм, я не знаю, запросить модель AdminUser? Что касается меня, я всегда хранил всех пользователей в одних и тех же таблицах с назначенным атрибутом «роли». - person Sergio Tulentsev; 29.11.2011
comment
Вы можете изменить имя коллекции, на которую ссылается модель, с помощью метода store_in. Итак, чтобы просмотреть таблицу admin_users, вам нужно добавить User.store_in 'admin_users' перед этим кодом. (этот ответ подразумевает использование Mongoid) - person Sergio Tulentsev; 29.11.2011
comment
Попытка User.store_in 'admin_users', однако получила undefined method. По-видимому, я не могу получить доступ к таблице, поскольку каждый раз я просто получаю ноль. Как насчет того, чтобы запросить всю таблицу и просто сначала получить все записи в ней, чтобы проверить, попадаю ли я в эту таблицу изначально? (Здесь работает MySQL, но с ActiveRecord это не имеет значения.) - person ylluminate; 29.11.2011
comment
: store_in является частью Mongoid gem. Вы можете получить доступ к драйверу Ruby низкого (er) уровня, вызвав User.db - person Sergio Tulentsev; 29.11.2011
comment
Хорошо спасибо. Мне удалось заставить это работать, сначала возясь и исследуя таблицу. Интересно, что настоящая проблема заключалась не в пароле, а в статусе записи. Сначала я использовал PostgreSQL, но недавно перешел на MySQL, и атрибут status вызывал ошибку! PGSQL хранит его как t для истины, тогда как MySQL сохраняет его как 1 (или 0 для false). При копировании через db это вызвало проблему и не преобразовало t - ›1. LOL, спасибо. - person ylluminate; 29.11.2011
comment
позвольте нам продолжить это обсуждение в чате - person ylluminate; 29.11.2011
comment
devise встроен, поэтому использование подтверждения pw излишне. User.find_by_email('[email protected]').update_attributes(:password => 'password') - person copremesis; 21.07.2017
comment
@copremesis: может быть, это работает сейчас, но уж точно не так 6 лет назад :) - person Sergio Tulentsev; 21.07.2017
comment
Еще несколько лет спустя, в 2020 году, Rails 6.0 выдает предупреждение, что update_attributes устарел и будет удален из Rails 6.1. Вместо этого используйте: user.update(password: new_password) - person Masa Sakano; 20.10.2020

Если вы запустите в консоли rails следующее, это должно сработать:

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

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

person gstraehle    schedule 13.01.2015
comment
Обратите внимание, что восклицательный знак устарел, это просто: User.find_by(email: 'user_email_address').reset_password('new_password','new_password') - person IrishDubGuy; 03.11.2016
comment
Также обратите внимание, что вы должны ввести действующий пароль, который соответствует требованиям к паролю в конфигурации вашего устройства. - person zwippie; 04.04.2018

Вы можете просто обновить поле пароля, пароль для подтверждения не требуется, devise сохранит его в зашифрованном виде.

u = User.find_by_email('[email protected]')
u.update_attribute(:password, '123123')
person Kshitij    schedule 06.02.2017

По какой-то причине (Rails 2.3 ??)

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

у меня не сработало, но

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

сделал это.

person valk    schedule 31.07.2012
comment
Причина в том, что where (); метода еще не было в рельсах 2.3, раньше мы использовали find (: all,: conditions = ›conditions). - person dennis; 23.01.2013

1. войдите в консоль ralis

$ sudo bundle exec rails console production

2.Затем обновите пароль администратора

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. Обновите страницу входа, используйте новый пароль для входа, наслаждайтесь!

Удачи!

person robinwen    schedule 25.08.2014
comment
devise встроен, поэтому использование подтверждения pw излишне. User.find_by_email('[email protected]').update_attributes(:password => 'password') - person copremesis; 21.07.2017

Если ваша учетная запись заблокирована из-за слишком большого количества попыток входа в систему, вам также может потребоваться:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
person Enzio    schedule 06.08.2015

person    schedule
comment
devise запекается в рельсах, поэтому использование подтверждения pw излишне. User.find_by_email('[email protected]').update_attributes(:password => 'password') - person copremesis; 21.07.2017