是否可以限制哪些字段保持不变?

时间:2010-11-06 02:39:20

标签: ruby-on-rails mongodb mongoid

我有一个使用mongoid的用户模型。该模型有密码,password_confirmation和encrypted_pa​​ssword字段。 password和password_confirmation字段在运行时填充用户在创建新用户时在屏幕上键入的值。当我坚持使用时,我不想保留未加密的密码值,我只想保留encrypted_pa​​ssword中包含的值。这可能吗?我可以用某些东西来表示某些字段是不可持久的吗?

提前致谢

克里斯

1 个答案:

答案 0 :(得分: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. 使用salt(随机值)并将其添加到密码中,然后再将其传递给hexdigest()。将salt存储在数据库中 - 比如名为password_salt
  3. 的列
  4. password_confirmation是一个虚拟属性,不需要在模型中定义(rails将在内部管理细节)