ユーザー情報を更新する機会をユーザーに提供したいと考えています。とりあえず名前とメールだけ。ユーザーは、更新を承認するために現在のパスワードを入力する必要があります。いくつかの方法を試しましたが、次の問題に行き着きました。
ユーザー属性を更新する前に、「validate_password」メソッドを呼び出します。
users_controller.rb:
def update
@user = User.find(params[:id])
respond_to do |format|
if validate_password(params[:password]) && @user.update_attributes(params[:user])
format.html { redirect_to @user, notice: 'Account was successfully updated.' }
format.json { head :no_content }
else
format.html { render action: "edit" }
format.json { render json: @user.errors, status: :unprocessable_entity }
end
end
終わり
application_controller.rb:
def validate_password(pswd)
if current_user.password_hash == BCrypt::Engine.hash_secret(pswd, current_user.password_salt)
true
else
false
end
終わり
正しいパスワードが「pswd」であっても false を返します。何か不足していますか?正しいソルトがわかっている場合は、パスワード ハッシュを再作成できますか?