gpt4 book ai didi

ruby-on-rails - 为什么我的 password_digest 返回 "invalid hash"错误?

转载 作者:行者123 更新时间:2023-12-02 00:14:33 27 4
gpt4 key购买 nike

我对为用户登录运行集成测试时遇到的错误感到有点困惑。以下是跟踪的前几行:

invalid hash
@ /home/benjamin/.rvm/gems/ruby-1.9.3-p194/gems/bcrypt-ruby-3.0.1/lib/bcrypt.rb:171:in `initialize'
/home/benjamin/.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.6/lib/active_model/secure_password.rb:58:in `new'
/home/benjamin/.rvm/gems/ruby-1.9.3-p194/gems/activemodel-3.2.6/lib/active_model/secure_password.rb:58:in `authenticate'
/home/benjamin/projects/LTClone/app/controllers/sessions_controller.rb:9:in `create'

所以错误来自 create 操作中的这一行:

if user && user.authenticate(params[:session][:password])

调用 secure_password.rb 中定义的 authenticate 方法:

def authenticate(unencrypted_password)
if BCrypt::Password.new(password_digest) == unencrypted_password
...

调用 BCrypt::Password.new 方法,定义在 bcrypt.rb 中:

def initialize(raw_hash)
if valid_hash?(raw_hash)
...
else
raise Errors::InvalidHash.new("invalid hash") # line 171
end
end

所以出于某种原因,raw_hashvalid_hash? 指定的正则表达式不匹配,这意味着 password_digest 变量不是一个有效哈希。基于this answer ,似乎我要验证的用户有一个空白或无效的 password_digest,但在我调用测试中的 create 操作之前,我可以 输入@user.password_digest,然后打印散列(Rubular 表示 valid_hash? 正则表达式匹配它)。我还将创建方法更改为

if user && user.password_digest && user.authenticate(params[:session][:password])

只是为了确保它确实存在。

所以现在我完全被难住了。看起来我有一个有效的 password_digest,但是 BCrypt::Password.new 拒绝承认它。有人知道为什么吗?

最佳答案

检查您的用户“password_digest”列。如果它是“nil”那么你会得到这个错误。建议简单地删除所有用户并确保正确创建用户。

关于ruby-on-rails - 为什么我的 password_digest 返回 "invalid hash"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13906432/

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