【问题标题】:Is it possible to limit which fields get persisted?是否可以限制保留哪些字段?
【发布时间】:2010-11-06 02:39:20
【问题描述】:
我有一个使用 mongoid 的用户模型。该模型具有密码、password_confirmation 和 encrypted_password 字段。 password 和 password_confirmation 字段在运行时使用用户在创建新用户时在屏幕上键入的值填充。当我坚持时,我不想坚持未加密的密码值,我只想坚持 encrypted_password 中包含的值。这可能吗?有什么东西可以用来表示某些字段不可持久化吗?
提前致谢
克里斯
【问题讨论】:
标签:
ruby-on-rails
mongodb
mongoid
【解决方案1】:
这是一种方法:
模型只需要密码字段并使用 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
注意事项:
- 密码应使用单向哈希存储,因此密码不应“可解密”
- 使用盐(随机值)并将其添加到密码中,然后再将其传递给
hexdigest()。将盐也存储在数据库中 - 比如说一个名为 password_salt 的列。
-
password_confirmation 是虚拟属性,不需要在模型中定义(rails 内部会管理细节)