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

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

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

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

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

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

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

Я видел в Devise::Models::DatabaseAuthenticable, что есть метод 'password=', но если я его вызову, например. в консоли rails для приложения:

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

Я просто возвращаю ту же строку простого текста («новый») и сохраняю сообщение о записи пользователя, это не заполняет поле зашифрованного_пароля.

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


person Iain    schedule 28.04.2011    source источник
comment
Я только что понял, что вышеизложенное работает просто отлично - я пробовал это на другом устройстве разработчика, которое не полностью выполнило миграцию устройства. дох!   -  person Iain    schedule 30.04.2011


Ответы (1)


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

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

Просто на самом деле :)

person Iain    schedule 30.04.2011