【发布时间】:2012-12-03 13:38:33
【问题描述】:
我想让用户有机会更新一些用户信息。现在只有姓名和电子邮件。用户需要输入当前密码来授权更新。我尝试了几种方法,归结为以下问题:
我在更新用户属性之前调用了“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。 我错过了什么吗?如果您知道正确的盐,您可以重新创建密码哈希吗?
【问题讨论】:
-
'end' 属于代码,格式让我失望 ;)
-
为什么你确定你在创建用户时有这个精确的散列?验证器也可以是单行,如果根本没有,只是条件。
-
“验证”只是我的方法名称。也许会误导它不是验证器。更多“检查密码正确”的方法。哈希的创建:pastebin.com/nv09i0ky
-
我也会投票支持@Jan 解决方案,尽管您所做的事情对 Ryan 有用。您可以从控制台尝试该过程,以确保一切正常。乍一看还不错。
标签: ruby-on-rails ruby bcrypt