-2

我正在使用 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 生成盐和哈希

BCrypt::Engine.generate_salt
BCrypt::Engine.hash_secret(password, salt)

我怎样才能从数据库中获取真正的哈希?

提前致谢 (:

4

1 回答 1

0

user.hash调用Object#hash方法而不是您的属性方法。我认为你有两个选择:

  1. 以其他方式调用它(不确定您使用的是什么 ORM,但user.read_attribute('hash')可能会起作用)
  2. 重命名您的字段
于 2013-01-26T09:49:43.667 回答