Разработайте, подтвердите current_password, если какие-либо важные поля были изменены - PullRequest
3 голосов
/ 02 сентября 2011

В частности, я использую Devise с Typus. Но я думаю, что мое недоразумение основано на моих знаниях о Devise.

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

Прямо сейчас я могу войти в систему и изменить любое из полей моей пользовательской модели. Включая пароль, без необходимости предварительно подтверждать мой пароль. Нехорошо. Итак, я добавил current_password в форму. Но это ничего не сделало. Затем я попытался проверить наличие на current_password. Тогда это, кажется, не принимает никакой ценности для этого.

Google не помог мне. Все соответствующие сообщения были об удалении current_password вместо его подтверждения. Это заставляет меня думать, что я неправильно понимаю использование current_password.

Кто-нибудь хочет поделиться своим пониманием? Благодарю.

Ответы [ 2 ]

6 голосов
/ 02 сентября 2011

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

user.valid_password?(params[:user][:password])

Обратите внимание, что, вероятно, вы должны изменить параметры [: user] [: password]на имя параметра для поля вашего пароля в форме (возможно, просто params [: пароль]).

Надеюсь, это поможет.

4 голосов
/ 31 марта 2012

На самом деле у devise есть встроенный метод для этого:

user.update_with_password(params, *options) вы можете прочитать rdoc здесь .

Обновлять атрибуты записи, когда: current_password соответствует, в противном случае возвращает ошибку: current_password. Он также автоматически отклоняет: password и: password_confirmation, если они не заполнены.

...