Come posso specificare un campo che può essere convalidato ma non memorizzato in linea di galleggiamento?

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

  •  20-12-2019
  •  | 
  •  

Domanda

Sto guardando l'esempio nella linea di galleggiamento Dochs qui .

var User = Waterline.Collection.extend({
  types: {
    // snip
    password: function(password) {
      return password === this.passwordConfirmation;
    });
  },

  attributes: {
    // snip
    password: {
      type: 'string',
      password: true
    },

    passwordConfirmation: {
      type: 'string'
    }
  }
});
.

C'è un modo per informare la linea di galleggiamento che passwordConfirmation non fa parte dello schema in modo che non sia stato creato se la migrazione sia impostata su alter o drop, o se si utilizza un motore DB Schemaless?

Il caso di uso effettivo che voglio è per un campo trasparente password campo da convalidato dalla richiesta, ma utilizzare beforeCreate per popolare un campo hash che viene effettivamente memorizzato (ma non consente di memorizzare la proprietà password nel processo). .

Grazie.

È stato utile?

Soluzione

Linea di galleggiamento non supporta i campi transitori convalidati ma non persistenti.È possibile aggiungere la proprietà schema: true al tuo modello che avrà filtrare eventuali attributi che non sono dichiarati esplicitamente, ma rendono comunque disponibili nelle callback dei cicli di vita.Dovresti fare la convalida per tali attributi manualmente (in beforeCreate() o beforeValidate() ad esempio) e perderai la capacità di aggiungere campi arbitrari agli DB di schemalee, ma non è necessariamente una soluzione negativa.

Per il tuo caso, però, non vedo il motivo per cui è esattamente necessario.Perché non solo hash la password in beforeCreate e salvarlo su password?

beforeCreate: function (values, cb) {

   values.password = hash(values.password);
   return cb();

}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top