2

を使い始めたばかりMongoDBで、特にMongoid.

当然のことながら、自分Userのパスワードがきちんと安全に保たれていることを確認したいと思いActiveRecordますbcrypt。を使用して同じ種類のものを実装するための、きれいで、安全で、簡単な方法を探していMongoidます。

私はmongoid-encryptor を見てきましたが、それをどのように使用するかについてはよくわかりません。

の Readme ファイルの例にあるように、私の簡略化されUserた外観は次のようになっていると仮定します。mongoid-encryptor

class User
  include Mongoid::Document
  include Mongoid::Encryptor
  field :name
  field :password
  encrypts :password
end

そして、私の WebApp (Sinatraこの場合は使用) では、次のようなヘルパーを定義します。

def login (name, cleartxtpass)
  return User.where(name: name, password: cleartxtpass).first
end
  1. 使用するにはどうすればよいbcryptですか?
  2. 私が行う必要がある前処理はありますか、cleartxtpassまたはそれをMongoid::Encryptor処理するだけですか? ドキュメントからは明らかではありません。
4

2 に答える 2

4

掘り下げた後、私は気にせずに使用することに決めましたMongoid::Encryptorが、使用時にこれらのことを行っていた試行錯誤された方法に固執することにしActiveRecordました。

だから今私のようにUser見える

class User
  include Mongoid::Document
  field :name, type: String
  field :password_hash, type: String
  index({name: 1}, {unique: true, name: 'user_name_index'})

  include BCrypt
  def password
    @password ||= Password.new(password_hash)
  end

  def password=(new_password)
    @password = Password.create(new_password)
    self.password_hash = @password
  end
end

私の認証ヘルパーメソッドは次のようになります

  def auth_user(username, password)
    user = User.where(name: username).first
    return user if user && user.password == password
    return nil
  end

それは御馳走になります。

于 2013-04-24T06:08:18.843 に答える