Ste*_*ess 4 ruby-on-rails devise ruby-on-rails-3 ruby-on-rails-3.2
我正在尝试实现一种方法,允许密码从设备外的其他服务更改无论如何.
# 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
Run Code Online (Sandbox Code Playgroud)
似乎我得到了密码加密错误oldpass包含旧密码的纯文本我需要哈希它看看它是否与当前密码匹配然后允许存储新密码.但是我所得到的只是密码错误.
重做:
def change_password(oldpass, newpass)
if valid_password?(oldpass)
password = newpass
save
return true
else
return false
end
end
Run Code Online (Sandbox Code Playgroud)
Tom*_*ček 11
如果您在应用程序或Rails控制台中,则无需自己加密密码.
只需按照以下方式更新用户,Devise将自行处理.
user.password = new_password
user.save
Run Code Online (Sandbox Code Playgroud)
然后Devise将加密密码并存储它.你只需要确保user.password_confirmation的nil.如果password_confirmation是其他任何东西,它将被匹配password.
编辑
您可以使用以下方法检查现有密码: user.valid_password?(old_password)
| 归档时间: |
|
| 查看次数: |
12097 次 |
| 最近记录: |