Я до сих пор не уверен, как сделать это «правильно» стандартным способом, но да, вы бы хотели такую форму.Действие контроллера проверит, действителен ли старый пароль, выполнив
user = User.find(session[:user_id]) if session[:user_id]
if user and user.authenticate(params[:old_password])
if params[:password] == params[:password_confirmation]
user.password_confirmation = BCrypt::Password.create(params[:password])
respond_to do |format|
format.html # reset_password_success.html.erb
end
else
redirect_to reset_password_url, notice: "Incorrect Password."
end
else
redirect_to reset_password_url, notice: "Incorrect Password."
end
Убедитесь, что вы фильтруете пароли, точно так же, как они фильтруются при регистрации нового пользователя.
Я нене знаю, будет ли ваша форма работать или нет.Я обнаружил, что, если я застрял в том, как правильно создать форму, или тороплюсь, я просто собираю ее вместе, используя обычный старый HTML, или использую его как опору.Решите это исходя из своих временных ограничений и прошлого опыта.
Если форма работает правильно, но при обработке запроса произошла ошибка, убедитесь, что у вас действительно есть доступ к параметрам с помощью params [: old_password] инапример.Он может быть вложен в другой объект params, например params [: user] [: old_password].Вы можете узнать, как отправляются параметры, посмотрев на консоль rails или просмотрев логи.Если он размещен на Heroku, вам нужно будет спросить у Heroku его журналы => https://devcenter.heroku.com/articles/logging И вы также можете это выяснить, прослушивая сетевой трафик (инструменты разработчика в основных браузерах или используя Fiddler => http://www.fiddler2.com/fiddler2/)
В этом коде предполагается, что вы выходите из книги по Agile Web Development с Rails (4-е изд.). Если нет, то необходимо внести некоторые изменения.