gpt4 book ai didi

mysql - Ruby 和 Sinatra,无法将散列密码与 BCrypt 进行比较

转载 作者:行者123 更新时间:2023-12-02 01:39:57 25 4
gpt4 key购买 nike

我正在使用 Sinatra 和 DataMapper 开发一个简单的 Ruby 身份验证应用程序。

我已经成功地实现了用户注册时的哈希密码方法,但我无法使身份验证路由正常工作,它只是不匹配提供的密码与存储在数据库中的哈希版本( MySQL)。

在阅读了很多文档、很多关于 stackoverflow 的问题以及更多文档之后,我在这里寻求您的帮助。

我创建了一个简单的 GET 路由来尝试了解 BCrypt 库的工作原理,而不将密码存储到数据库中,此路由的目的只是了解如何使用该库:

get "/test" do
password_hash = BCrypt::Password.create("wazz")
password = "wazz"
puts password_hash
if BCrypt::Password.new(password_hash).is_password? password
status 201
end
halt(500, {error: password_hash}.to_json)
end

所以基本上我所要做的就是向/test 发送一个 GET 请求,所有这些都应该完成,但事实并非如此,BCrypt::Password.new 似乎没有根据散列密码验证原始密码。

在此先感谢您,我们将不胜感激。

最佳答案

您对 bcrypt 的使用有效,但程序流程错误。最重要的是,对 status 201 的调用不会在此时从 Controller 退出,它会继续,因此您已经设置好了 bcrypt 是否工作无关紧要。

改为做这样的事情:

get "/test" do
password_hash = BCrypt::Password.create("wazz")
password = "wazz"

unless BCrypt::Password.new(password_hash).is_password? password
halt(500, {error: password_hash}.to_json)
end

status 201
{message: 'Session created'}.to_json
end

关于mysql - Ruby 和 Sinatra,无法将散列密码与 BCrypt 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29006555/

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