-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メソッドを呼び出します。次の 2 つのオプションがあると思います。

  1. 他の方法で呼び出します(どのORMを使用しているかはわかりませんが、次のようなものが機能する可能性がありますuser.read_attribute('hash')
  2. フィールドの名前を変更する
于 2013-01-26T09:49:43.667 に答える