Можно ли ограничить, какие поля сохраняются? - PullRequest
0 голосов
/ 06 ноября 2010

У меня есть модель User, которая использует mongoid. Модель имеет поля password, password_confirmation и encrypted_password. Поля password и password_confirmation заполняются во время выполнения значением, которое пользователь вводит на экране при создании нового пользователя. Когда я сохраняюсь, я не хочу сохранять незашифрованные значения пароля, я только хочу сохранить значение, содержащееся в encrypted_password Это возможно? Есть ли что-то, что я могу использовать для обозначения определенных полей как непостоянных?

Заранее спасибо

Chris

1 Ответ

0 голосов
/ 06 ноября 2010

Вот способ:

Модель нуждается только в поле пароля и использует 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 - это виртуальный атрибут, его не нужно определять в модели (рельсы будут управлять деталями внутри)
...