【问题标题】:Is it possible to limit which fields get persisted?是否可以限制保留哪些字段?
【发布时间】:2010-11-06 02:39:20
【问题描述】:

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

提前致谢

克里斯

【问题讨论】:

  • 使用设计,你为什么要重新发明轮子?

标签: 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

注意事项:

  1. 密码应使用单向哈希存储,因此密码不应“可解密”
  2. 使用盐(随机值)并将其添加到密码中,然后再将其传递给hexdigest()。将盐也存储在数据库中 - 比如说一个名为 password_salt 的列。
  3. password_confirmation 是虚拟属性,不需要在模型中定义(rails 内部会管理细节)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-02
    • 1970-01-01
    • 2011-06-23
    • 1970-01-01
    • 1970-01-01
    • 2018-08-03
    相关资源
    最近更新 更多