[英]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.