2013-04-24 62 views
2

我剛開始使用MongoDB,特別是Mongoid如何用bcrypt和mongoid保護用戶密碼

自然我想確保我的User的密碼保持良好和安全,以前我會用ActiveRecordbcrypt來完成此操作。我正在尋找一種使用Mongoid來實現相同類型事物的好方法,乾淨,安全,簡單的方法。

我看了一下mongoid-encryptor,但我還沒弄清楚如何使用它。

假設我的簡化User看起來像這樣,根據mongoid-encryptor的自述文件中的示例。

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

在我的Web應用程序(在這種情況下使用Sinatra)我要定義這樣一個輔助的

def login (name, cleartxtpass) 
    return User.where(name: name, password: cleartxtpass).first 
end 
  1. 我如何得到它使用bcrypt
  2. 有沒有我需要做的任何預處理cleartxtpass或將Mongoid::Encryptor剛剛處理?從文檔中不清楚。

回答

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 

一個可行的治療。