我仍然不知道如何通過標準的方式來做到這一點「正確的」,但是,是的,你會想這樣的一個形式。控制器行動將檢查舊密碼是通過做
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。如果不是,那麼就需要做一些調整。