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

92

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

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

иллюминат
источник
Valk: where () недоступен до rails 3. Но то, как вы это сделали, тоже нормально.
hellion

Ответы:

140

Это более-менее так, как вы описали :-)

# 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

Обновление через 6 лет :)

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

user.password = new_password; user.save
# or
user.update_attributes(password: new_password)
Серджио Тюленцев
источник
Ах, хм. Это будет работать для стандартного пользователя, но в данном случае это из таблицы admin_users. Какую настройку можно извлечь из этой таблицы по сравнению с пользователями? Просто установить его на user = AdminUser ... не сработало.
ylluminate
Умм, я не знаю, запросить модель AdminUser? Что касается меня, я всегда хранил всех пользователей в одних и тех же таблицах с назначенным атрибутом «роли».
Серджио Тюленцев
Вы можете изменить имя коллекции, на которую ссылается модель, с помощью метода store_in. Итак, чтобы просмотреть таблицу admin_users, вам нужно добавить User.store_in 'admin_users' перед этим кодом. (этот ответ подразумевает использование Mongoid)
Серджио Туленцев
Попытка, User.store_in 'admin_users'однако, получена undefined method. По-видимому, я не могу получить доступ к таблице, поскольку каждый раз я просто получаю ноль. Как насчет запроса всей таблицы и первоначального получения всех записей в ней, чтобы проверить, попадаю ли я в эту таблицу изначально? (Здесь работает MySQL, но с ActiveRecord это не имеет значения.)
ylluminate
: store_in является частью Mongoid gem. Вы можете получить доступ к драйверу
Ruby
55
# $ rails console production
u=User.where(:email => 'usermail@gmail.com').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!
Эрик Го
источник
1
devise запекается в рельсах, поэтому использование подтверждения pw излишне. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis
27

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

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

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

Gstraehle
источник
6
Обратите внимание, что восклицательный знак устарел, это просто:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy
1
Также обратите внимание, что вы должны ввести действительный пароль, который соответствует требованиям к паролю в конфигурации вашего устройства.
zwippie
5

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

u = User.find_by_email('user@example.com')
u.update_attribute(:password, '123123')
Кшитидж
источник
3

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

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

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

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

сделал это.

валк
источник
Причина в том, что where (); метода еще не было в рельсах 2.3, раньше мы использовали find (: all,: conditions => conditions).
dennis
3

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

Удачи!

Робинвен
источник
devise встроен, поэтому использование подтверждения pw излишне. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis
2
User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis
источник
0

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

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Энцио
источник