Come posso specificare un campo che può essere convalidato ma non memorizzato in linea di galleggiamento?
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.
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();
}
.