Перенос существующей пользовательской модели в Devise

#ruby-on-rails #authentication #passwords #migration #devise

#ruby-on-rails #аутентификация #пароли #миграция #разработка

Вопрос:

Я пытаюсь перенести устаревшее приложение на Rails 3 и изменить аутентификацию для использования Devise. Я создал модель и миграции и импортировал все пользовательские данные.

Я не планирую переносить пароли, поскольку существующая схема не та, которую мы хотели бы использовать в будущем, но я хочу иметь возможность предоставить пользователям простой интерфейс.

В идеале я хотел бы перехватить ошибку входа в систему, а затем проверить пароль с помощью устаревшего поля, а затем обновить пароль Devise с его помощью, если он совпадает.

Я вижу, что Warden выдает мне обратный вызов, который может перехватывать ошибки, поэтому я ожидаю, что смогу перехватить ошибку входа в систему.

Однако, поскольку все пароли (в Devise) пусты, я получаю ошибки, связанные с хэшем, поскольку поля encrypted_password пусты.

Есть ли способ обновить все учетные записи пользователей случайным паролем?

Я видел в Devise::Models::DatabaseAuthenticatable, что существует метод ‘password =’, но если я вызову его, например, в консоли rails для приложения:

 User.find(1).password=('new')
 => "new"
  

Я просто возвращаю ту же текстовую строку (‘new’) и сохраняю запись пользователя post, при этом поле encrypted_password не заполняется.

Я искал, но, похоже, не могу ее найти. Любые предложения приветствуются!

Комментарии:

1. Я только что выяснил, что вышеописанное работает просто отлично — я пробовал это на другом блоке разработчика, который не полностью запустил миграцию devise. ого!

Ответ №1:

Хорошо, на всякий случай, если кто-то еще такой же тряпичный, каким я был последние 24 часа, вот как вы устанавливаете пароль:

 user = User.find(id)
user.password = 'new-password'
user.save
  

На самом деле просто 🙂