検証はできるがウォーターラインに保存できないフィールドを指定するにはどうすればよいですか?
質問
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();
}
所属していません StackOverflow