Как сделать форму смены пароля? - PullRequest
3 голосов
/ 12 января 2012

Я использую метод has_secure_password, как изменить форму пароля и действие контроллера?Я думаю, что это должно выглядеть так:

<%= form_for @parent, :url => update_password_path(@parent) do |f| %>
<%= f.label :old_password %><br />
<%= f.text_field :old_password %><br />
<%= f.label :new_password %><br />
<%= f.text_field :password %><br />
<%= f.label :password_confirmation %><br />
<%= f.text_field :password_confirmation %><br />
<%= f.submit %>
<% end %>

1 Ответ

0 голосов
/ 16 января 2013

Я до сих пор не уверен, как сделать это «правильно» стандартным способом, но да, вы бы хотели такую ​​форму.Действие контроллера проверит, действителен ли старый пароль, выполнив

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-е изд.). Если нет, то необходимо внести некоторые изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...