无法使用rails从mongodb检索bcrypt哈希

时间:2013-01-26 07:36:28

标签: ruby-on-rails mongodb bcrypt

我正在使用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中获取真正的哈希?

提前致谢(:

1 个答案:

答案 0 :(得分:0)

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

  1. 以其他方式调用它(不确定你使用的是什么ORM但是有些东西 像user.read_attribute('hash')可能有效)
  2. 重命名您的字段