Придумайте скидання пароля з консолі Rails


92

Під час запуску програми, як ви вибираєте користувача за адресою електронної пошти, а потім встановлюєте пароль вручну в rails consoleDevise?

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


Valk: where () недоступний до рейок 3. Але те, як ви це зробили, теж прекрасно.
hellion

Відповіді:


139

Це більш-менш, як ви описали :-)

# 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. Що підходить для цієї таблиці порівняно з користувачами? Просто встановивши для користувача = AdminUser ... не вдалося.
іллімінат

Хм, я не знаю, запитувати модель AdminUser? Що стосується мене, я завжди зберігав усіх користувачів в одних таблицях із призначеним атрибутом 'role'.
Серхіо Туленцев

Ви можете змінити назву колекції, на яку посилається модель, методом: store_in. Отже, щоб заглянути в таблицю admin_users, вам слід додати User.store_in 'admin_users' перед цим кодом. (ця відповідь передбачає використання Mongoid)
Серхіо Туленцев

Спроба User.store_in 'admin_users'проте отримана undefined method. Здається, я не маю доступу до таблиці, оскільки щоразу просто повертаю нуль. А як щодо запиту всієї таблиці і просто отримання всіх записів у ній спочатку для перевірки, чи не потрапляю я до цієї таблиці спочатку? (Тут працює MySQL, однак це не має значення для ActiveRecord.)
ylluminate

: store_in - частина монгоїдної перлини. Ви можете отримати доступ до рубінового драйвера низького рівня (er), зателефонувавши на User.db
Серхіо Туленцев

55
# $ rails console production
u=User.where(:email => 'usermail@gmail.com').first
u.password='userpassword'
u.password_confirmation='userpassword'
u.save!

1
пристрій випікається на рейках, тому використання підтвердження pw зайве. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis

27

Якщо ви запустите наступне в консолі рейок, це має зробити трюк:

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

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


6
Зверніть увагу, що знак оклику застарів, він лише:User.find_by(email: 'user_email_address').reset_password('new_password','new_password')
IrishDubGuy

1
Також зверніть увагу, що вам потрібно ввести дійсний пароль, який підтверджує вимоги до пароля у вашій конфігурації пристрою.
zwippie

5

Ви можете просто оновити поле пароля, не потрібно підтвердження пароля, пристрій збереже його в зашифрованому вигляді

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')

зробив це.


Причиною цього є те, що де (); методу ще не було в rails 2.3, ми використовували знахідку (: все,: умови => умови) ще за днів.
Денніс

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

Щасти!


пристрій запечене, тому використання підтвердження pw зайве. User.find_by_email('joe@example.com').update_attributes(:password => 'password')
copremesis


0

Якщо ваш обліковий запис заблоковано через занадто багато спроб входу, вам також може знадобитися:

user.locked_at = ''
user.failed_attempts = '0'
user.save!
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.