[英]Rails > Devise password encryption
我正在嘗試實現一種方法,允許密碼從設備外的其他服務更改無論如何。
# Profile password change
def change_password(oldpass, newpass)
pepper = nil
cost = 10
# Encrypt plain text passwords
encrypt_old = ::BCrypt::Password.create("#{oldpass}#{pepper}", :cost => cost).to_s
# Validate old
if self.encrypted_password == encrypt_old
encrypt_new = ::BCrypt::Password.create("#{newpass}#{pepper}", :cost => cost).to_s
self.encrypted_password = encrypt_new
self.save
else
Logger.new("Wrong old password!")
end
end
似乎我得到了密碼加密錯誤oldpass包含舊密碼的純文本我需要哈希它看看它是否與當前密碼匹配然后允許存儲新密碼。 但是我所得到的只是密碼錯誤。
重做:
def change_password(oldpass, newpass)
if valid_password?(oldpass)
password = newpass
save
return true
else
return false
end
end
如果您在應用程序或Rails控制台中,則無需自己加密密碼。
只需按照以下方式更新用戶,Devise將自行處理。
user.password = new_password
user.save
然后Devise將加密密碼並存儲它。 您只需要確保user.password_confirmation
為nil
。 如果password_confirmation
是其他任何東西,它將與password
匹配。
編輯
您可以使用以下命令檢查現有密碼: user.valid_password?(old_password)
使用Devise,您無需自己處理使用bcrypt。 默認情況下,它處理此更改密碼方法。 你可以在這里查看源代碼,或者只在你的Rails應用程序中查看config/intitalizers/devise.rb
。
另外,如果你使用Devise提供的#update_with_password
方法,那么你可以傳遞一個像這樣的哈希:
{ :current_password => 'pass', :password => 'pass_new', :password_confirmation => 'pass_new' }
或者,如果您不希望用戶必須提供確認,則可以省略:password_confirmation
。
編輯:我使用了錯誤的字段; 它應該是'current_password'而不是'old_password'。
這是Devise源代碼中的方法:
# Update record attributes when :current_password matches, otherwise returns
# error on :current_password. It also automatically rejects :password and
# :password_confirmation if they are blank.
def update_with_password(params, *options)
current_password = params.delete(:current_password)
if params[:password].blank?
params.delete(:password)
params.delete(:password_confirmation) if params[:password_confirmation].blank?
end
result = if valid_password?(current_password)
update_attributes(params, *options)
else
self.assign_attributes(params, *options)
self.valid?
self.errors.add(:current_password, current_password.blank? ? :blank : :invalid)
false
end
clean_up_passwords
result
end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.