2010-11-06 79 views
0

我有一個正在使用mongoid的用戶模型。該模型有一個密碼,password_confirmation和encrypted_pa​​ssword字段。密碼和password_confirmation字段在運行時填入用戶在創建新用戶時在屏幕上輸入的值。當我堅持時,我不想保留未加密的密碼值,我只想保留encrypted_pa​​ssword中包含的值。這可能嗎?有什麼我可以用來表示某些領域不能持久?是否可以限制哪些字段持續存在?

在此先感謝

克里斯

+0

用色器件,你爲什麼要重新發明輪子? – MatthewFord 2010-11-23 00:44:21

回答

0

這裏有一個辦法:

模型只需要密碼字段和使用的before_filter:

def User 
    before_save :hash_password 
    attr_accessible :password, :password_confirmation 
    def hash_password 
    #todo: improve by adding a salt 
    self.password = Digest::SHA1.hexdigest(self.password) 
    end 
end 

注:

  1. 密碼應該使用單向散列進行存儲,因此密碼不應該是可解密的
  2. 使用鹽(隨機值)並將其添加到密碼,然後將其傳遞到hexdigest()。將鹽儲存在數據庫中 - 說一個名爲password_salt的列。
  3. password_confirmation是一個虛擬的屬性,並不需要在模型中定義(軌道將在內部管理的細節)
相關問題