Comment spécifier un champ qui peut être validé mais non stocké dans Waterline ?
Question
Je regarde l'exemple dans la documentation Waterline ici.
var User = Waterline.Collection.extend({
types: {
// snip
password: function(password) {
return password === this.passwordConfirmation;
});
},
attributes: {
// snip
password: {
type: 'string',
password: true
},
passwordConfirmation: {
type: 'string'
}
}
});
Existe-t-il un moyen de dire à Waterline que passwordConfirmation
ne fait pas partie du schéma et n'est donc pas créé si migrate est défini sur alter
ou drop
, ou si vous utilisez un moteur de base de données sans schéma ?
Le cas d'utilisation réel que je souhaite concerne un texte clair password
champ à valider à partir de la requête, mais utilisez beforeCreate
pour peupler un hash
champ qui est réellement stocké (mais ne permettant pas le password
propriété à stocker dans le processus).
Merci.
La solution
Waterline ne prend pas en charge les champs transitoires validés mais non persistants.Vous pouvez ajouter le schema: true
propriété à votre modèle qui lui permettra de filtrer tous les attributs qui ne sont pas explicitement déclarés, tout en les rendant disponibles dans les rappels du cycle de vie.Vous devrez effectuer la validation de ces attributs manuellement (dans beforeCreate()
ou beforeValidate()
par exemple), et vous perdriez la possibilité d'ajouter des champs arbitraires aux bases de données sans schéma, mais ce n'est pas nécessairement une mauvaise solution.
Pour votre cas cependant, je ne vois pas pourquoi c'est exactement nécessaire.Pourquoi ne pas simplement hacher le mot de passe beforeCreate
et sauvegardez-le dans password
?
beforeCreate: function (values, cb) {
values.password = hash(values.password);
return cb();
}