我正在使用rails和mongodb开发应用程序。它有一个身份验证系统,但根本不工作。过了一会儿,我想到了原因。 如果我这样做:
<% user = User.where(:email => 'test@test.com').first %>
<%= user.hash %> | <%= user.salt %>
它返回:
287708835 | $2a$10$Arn.fJ0QT3zKRE748wNbXO
但如果我在mongo上做“相同”
db.users.find({'email' => 'test@test.com'})
它返回:
{ "_id" : ObjectId("5103834b108f67f3e9000005"), "email" : "test@test.com", "salt" : "$2a$10$Arn.fJ0QT3zKRE748wNbXO", "hash" : "$2a$10$Arn.fJ0QT3zKRE748wNbXOYBI7k54x6HKypo0m4LyUrvERpTKygSe" }
所以我可以毫无问题地检索盐但不是哈希。
我使用bcrypt-ruby生成salt和hash
BCrypt::Engine.generate_salt
BCrypt::Engine.hash_secret(password, salt)
如何从db中获取真正的哈希?
提前致谢(:
答案 0 :(得分:0)
user.hash
调用Object#hash方法而不是您的属性方法。我认为你有两个选择:
user.read_attribute('hash')
可能有效)