¿Cómo especifico un campo que se puede validar pero no almacenar en Waterline?

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

  •  20-12-2019
  •  | 
  •  

Pregunta

Estoy viendo el ejemplo en los documentos de Waterline. aquí.

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

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

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

¿Hay alguna manera de decirle a Waterline que passwordConfirmation no forma parte del esquema, por lo que no se crea si migrar está configurado en alter o drop, ¿O si utiliza un motor de base de datos sin esquema?

El caso de uso real que quiero es un texto claro. password campo para validar desde la solicitud, pero use beforeCreate para poblar un hash campo que realmente está almacenado (pero no permitiendo el password propiedad que se almacenará en el proceso).

Gracias.

¿Fue útil?

Solución

Waterline no admite campos transitorios que estén validados pero no persistan.Puedes agregar el schema: true propiedad a su modelo, lo que hará que filtre cualquier atributo que no esté declarado explícitamente, pero aún así estará disponible en las devoluciones de llamadas del ciclo de vida.Tendrías que hacer la validación de esos atributos manualmente (en beforeCreate() o beforeValidate() por ejemplo), y perdería la capacidad de agregar campos arbitrarios a bases de datos sin esquema, pero no es necesariamente una mala solución.

Sin embargo, para su caso, no veo por qué es exactamente necesario.¿Por qué no simplemente codificar la contraseña? beforeCreate y guardarlo de nuevo en password?

beforeCreate: function (values, cb) {

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

}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top