Ruby 和 Sinatra,无法将散列密码与 BCrypt 进行比较
Ruby and Sinatra, unable to compare hashed password with BCrypt
我正在使用 Sinatra 和 DataMapper 开发一个简单的 Ruby 身份验证应用程序。
我已经成功地实现了用户注册时的散列密码方法,但是我无法让身份验证路由工作,它只是不匹配提供的密码和存储在数据库 (MySQL).
在阅读了很多文档、很多关于 Whosebug 的问题以及更多文档之后,我在这里寻求您的帮助。
我创建了一个简单的 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
的调用不会在此时从控制器退出,它会继续进行,因此您已经设置好了 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
我正在使用 Sinatra 和 DataMapper 开发一个简单的 Ruby 身份验证应用程序。
我已经成功地实现了用户注册时的散列密码方法,但是我无法让身份验证路由工作,它只是不匹配提供的密码和存储在数据库 (MySQL).
在阅读了很多文档、很多关于 Whosebug 的问题以及更多文档之后,我在这里寻求您的帮助。
我创建了一个简单的 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
的调用不会在此时从控制器退出,它会继续进行,因此您已经设置好了 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