我正在尝试实现一种方法,以允许无论如何从设计之外的另一个服务更改密码。
# 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
然后设计将加密密码并存储它。您只需要确保
user.password_confirmation
是 nil
.如 password_confirmation
是别的,它将与 password
匹配.编辑
您可以通过以下方式检查现有密码:
user.valid_password?(old_password)
关于ruby-on-rails - Rails > 设计密码加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15647310/