如何进行密码更改表格?

时间:2012-01-12 18:06:05

标签: ruby-on-rails-3.1

我使用的是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 :(得分:0)

我仍然不确定如何通过标准方式做到'正确',但是,是的,你会想要一个这样的形式。控制器操作将通过执行

检查旧密码是否有效
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对象内,如params [:user] [:old_password]。您可以通过查看rails控制台或查看日志来了解参数的发送方式。如果这是在Heroku上托管,你需要问Heroku它的日志=&gt; https://devcenter.heroku.com/articles/logging 您还可以通过收听网络流量(主流浏览器上的开发工具或使用Fiddler =&gt; http://www.fiddler2.com/fiddler2/)来解决这个问题。

这段代码假设您正在使用Rails(第4版)书中的Agile Web Development。如果没有,那么就必须进行一些调整。