我正在使用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似乎不能将原始密码与哈希密码进行验证。
提前感谢您的帮助,非常感激。
password_hash.is_password?( password )
作为测试。 - Neil Slaterstatus 201
,然后停止并将状态设置回 500……所以这段代码总是以服务器错误终止,无论密码发生了什么。bcrypt 没有问题,只是你需要在 Sinatra 路由中反转逻辑。 - Neil Slater