Wie gebe ich ein Feld an, das validiert, aber nicht in Waterline gespeichert werden kann?

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

  •  20-12-2019
  •  | 
  •  

Frage

Ich schaue mir das Beispiel in den Waterline-Dokumenten an hier.

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

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

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

Gibt es eine Möglichkeit, Waterline das mitzuteilen passwordConfirmation ist nicht Teil des Schemas, sodass es nicht erstellt wird, wenn migrate auf festgelegt ist alter oder drop, oder wenn Sie eine schemalose DB-Engine verwenden?

Der eigentliche Anwendungsfall, den ich möchte, ist für einen Klartext password feld, das aus der Anfrage validiert werden soll, aber verwenden Sie beforeCreate um eine zu füllen hash feld, das tatsächlich gespeichert ist (aber nicht zulässt, dass die password eigenschaft, die im Prozess gespeichert werden soll).

Danke.

War es hilfreich?

Lösung

Waterline unterstützt keine vorübergehenden Felder, die validiert, aber nicht persistent sind.Sie können das hinzufügen schema: true eigenschaft für Ihr Modell, mit der alle Attribute herausgefiltert werden, die nicht explizit deklariert sind, aber dennoch in Lebenszyklus-Rückrufen verfügbar gemacht werden.Sie müssten die Validierung für diese Attribute manuell durchführen (in beforeCreate() oder beforeValidate() zum Beispiel), und Sie würden die Möglichkeit verlieren, schemalosen Datenbanken beliebige Felder hinzuzufügen, aber es ist nicht unbedingt eine schlechte Lösung.

Für Ihren Fall verstehe ich jedoch nicht, warum es genau notwendig ist.Warum nicht einfach das Passwort hashen beforeCreate und speichere es zurück zu password?

beforeCreate: function (values, cb) {

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

}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top