Rails API - 设计:更新用户更新密码

时间:2015-02-03 02:57:46

标签: ruby-on-rails ruby ruby-on-rails-4 devise

在尝试编辑用户密码时,我遇到了一个非常奇怪的问题 - 这是我正在做的简化版本:

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"}

为了更准确一点,尝试登录一旦触发,导致我无法使用旧密码或新密码登录。如果有办法看到哪个密码保存在该函数中,我应该可以调试它!

1 个答案:

答案 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的字符串并没有指出任何可能与另一个红宝石字符串不同的东西......但无论如何,这都有效!