Comment spécifier un champ qui peut être validé mais non stocké dans Waterline ?

StackOverflow https://stackoverflow.com//questions/25008531

  •  20-12-2019
  •  | 
  •  

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.

Était-ce utile?

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();

}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top