2010-11-06 2 views
0

J'ai un modèle d'utilisateur qui utilise mongoid. Le modèle comporte un mot de passe, un mot de passe de confirmation et un mot de passe chiffré. Les champs password et password_confirmation sont remplis lors de l'exécution avec la valeur que l'utilisateur saisira à l'écran lors de la création d'un nouvel utilisateur. Lorsque je persiste, je ne veux pas conserver les valeurs de mot de passe non cryptées, je veux seulement conserver la valeur contenue dans encrypted_password. Est-ce possible? Y a-t-il quelque chose que je peux utiliser pour indiquer que certains champs ne sont pas persistants?Est-il possible de limiter les champs qui sont persistés?

Merci à l'avance

Chris

+0

CONCEVOIR utilisation, pourquoi réinventer la roue? – MatthewFord

Répondre

0

Voici une manière:

modèle n'a besoin que le champ de mot de passe et d'utiliser un 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 

Notes:

  1. Mots de passe doit être stocké à l'aide d'un hachage unidirectionnel et les mots de passe ne doivent pas être 'décryptables'
  2. Utilisez un salt (une valeur aléatoire) et ajoutez-le au mot de passe avant de le passer au hexdigest(). Stockez également le sel dans la base de données, par exemple une colonne appelée password_salt.
  3. password_confirmation est un attribut virtuel et n'a pas besoin d'être définie dans le modèle (rails géreront les détails en interne)
Questions connexes