簡體   English   中英

Rails API-設計:更新用戶更新密碼

[英]Rails API - Devise: Update password on User update

嘗試編輯用戶密碼時,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哈希的轉儲:

 {"username"=>"testytest", 
  "first_name"=>"Test",
  "last_name"=>"testy",
  "password"=>"password", 
  "password_confirmation"=>"password"}

確切地說,一旦觸發該登錄名,我將無法使用舊密碼或新密碼登錄。 如果有辦法查看在該函數中保存了哪個密碼,我應該可以對其進行調試!

好了,經過三天的努力,我終於想出了一個解決方案,但是這很丑陋:我所做的就是這個(我在用戶模型中添加了一種方法來簡化):

  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

再次,檢查來自參數的字符串並沒有指出可能與另一個紅寶石字符串不同的任何東西……但是無論如何,這可行!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM