gpt4 book ai didi

ruby-on-rails - 使用 BCrypt 更新密码

转载 作者:太空宇宙 更新时间:2023-11-03 18:21:23 25 4
gpt4 key购买 nike

当我通过 BCrypt 使用用户名和密码登录时检查没有问题,一切都很好。

但是当我完成恢复密码的过程并尝试使用新密码登录时,BCrypt 永远不会返回 true。

我的代码如下:

before_save :encrypt_password
before_update :encrypt_password

def authenticate
player = Player.find_by(mail: self.mail)
unless player.nil?
current_password = BCrypt::Password.new(player.password)
if current_password == self.password
player
else
nil
end
end
end

private
def encrypt_password
unless self.password.nil?
self.password = BCrypt::Password.create(self.password)
end

我正在使用 rails 4

最佳答案

您不需要 before_update 回调。

创建新记录(本例中为用户)时,只会触发 before_save。所以你得到了正确的行为。

但是在更新记录时,before_updatebefore_save 都会被触发,这意味着您的password 列被加密了两次。这就是为什么你会得到意想不到的行为。

检查 this page有关回调的更多信息。


此外,我认为将 password 设为数据库中的真实列是个坏主意。您只需要在数据库中创建一个名为 encrypted_pa​​ssword 的列,并将 password 设为虚拟属性即可。

所以你可以这样写encrypt_password方法:

def encrypt_password
unless self.password.nil?
self.encrypt_password = BCrypt::Password.create(self.password)
end

这让你没有机会犯你刚才犯的错误。

关于ruby-on-rails - 使用 BCrypt 更新密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17773350/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com