検証はできるがウォーターラインに保存できないフィールドを指定するにはどうすればよいですか?

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

  •  20-12-2019
  •  | 
  •  

質問

Waterline ドキュメントの例を見ています ここ.

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

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

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

ウォーターラインにそれを伝える方法はありますか passwordConfirmation はスキーマの一部ではないため、移行が に設定されている場合は作成されません。 alter または drop, 、またはスキーマレス DB エンジンを使用している場合は?

私が望む実際の使用例はクリアテキストです password リクエストから検証されるフィールドですが、使用します beforeCreate にデータを入力する hash 実際に保存されるフィールド (ただし、 password プロセスに保存されるプロパティ)。

ありがとう。

役に立ちましたか?

解決

ウォーターラインは、検証されても永続化されない一時フィールドをサポートしていません。を追加できます。 schema: true プロパティをモデルに追加すると、明示的に宣言されていない属性がフィルターで除外されますが、ライフサイクル コールバックで使用できるようになります。これらの属性の検証は手動で行う必要があります ( beforeCreate() または beforeValidate() たとえば)、スキーマレス DB に任意のフィールドを追加できなくなりますが、これは必ずしも悪い解決策ではありません。

ただし、あなたの場合、なぜそれが正確に必要なのかわかりません。なぜパスワードをハッシュ化しないのですか beforeCreate そしてそれを保存し直します password?

beforeCreate: function (values, cb) {

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

}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top