2012-01-12 61 views
3

我正在使用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 %> 

回答

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 [:user] [:old_password]。您可以通過查看您的導軌控制檯或查看日誌來了解參數的發送方式。如果這是在Heroku上託管,你需要問的Heroku爲它的日誌=>https://devcenter.heroku.com/articles/logging 你也可以計算出來通過監聽網絡流量(在主流瀏覽器開發工具或使用招=>http://www.fiddler2.com/fiddler2/

這段代碼假設你要開始使用Rails(第4版)的Agile Web Development。如果不是,那麼就需要做一些調整。