在尝试编辑用户密码时,我遇到了一个非常奇怪的问题 - 这是我正在做的简化版本:
def update
user = User.find(params[:id])
password = params.delete(:password)
password_confirmation = params.delete(:password_confirmation)
if password.present? and password != "" and password == password_confirmation
user.password = password
end
user.update(params)
user.save
render json: user
end
如果我将密码设置为任意字符串,通过添加
,真的很奇怪 password = "testpassword"
以上
user.password = password
它工作正常,密码设置为“testpassword”,我可以正常使用它登录。但是,如果我尝试使用上面代码中的param,我无法使用params [:password]中设置的密码登录。我已经尝试强制对字符串进行编码,并使用user.update_without_password,但无济于事。
有人会对此有任何想法吗?它让我疯狂!
这是params hash的转储:
{"username"=>"testytest",
"first_name"=>"Test",
"last_name"=>"testy",
"password"=>"password",
"password_confirmation"=>"password"}
为了更准确一点,尝试登录一旦触发,导致我无法使用旧密码或新密码登录。如果有办法看到哪个密码保存在该函数中,我应该可以调试它!
答案 0 :(得分:0)
好吧,经过3天的努力,我终于提出了一个解决方案,但是它非常难看:我做的就是这个(我已经为用户模型添加了一个方法来简化):
def update_password(new_password)
password_forced = ""
new_password.each_byte do |byte|
password_forced << byte.chr
end
self.password = password_forced
self.save
end
再一次,检查来自params的字符串并没有指出任何可能与另一个红宝石字符串不同的东西......但无论如何,这都有效!