كيف أحدد حقلاً يمكن التحقق من صحته ولكن لا يمكن تخزينه في Waterline؟
سؤال
أنا أنظر إلى المثال في مستندات 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'
}
}
});
هل هناك طريقة لإخبار Waterline بذلك passwordConfirmation
ليس جزءًا من المخطط بحيث لا يتم إنشاؤه إذا تم تعيين الترحيل على alter
أو drop
, أو في حالة استخدام محرك قاعدة بيانات بدون مخطط؟
حالة الاستخدام الفعلية التي أريدها هي نص واضح password
الحقل للتحقق من صحته من الطلب، ولكن استخدم beforeCreate
لسكان أ hash
الحقل الذي تم تخزينه بالفعل (ولكن لا يسمح بـ password
الممتلكات التي سيتم تخزينها في هذه العملية).
شكرًا.
المحلول
لا يدعم Waterline الحقول المؤقتة التي تم التحقق من صحتها ولكنها لم تستمر.يمكنك إضافة schema: true
خاصية للنموذج الخاص بك والتي ستجعله يقوم بتصفية أي سمات لم يتم الإعلان عنها بشكل صريح، ولكن مع الاستمرار في إتاحتها في عمليات الاسترجاعات الخاصة بدورة الحياة.سيتعين عليك التحقق من صحة هذه السمات يدويًا (في beforeCreate()
أو beforeValidate()
على سبيل المثال)، وستفقد القدرة على إضافة حقول عشوائية إلى قاعدة بيانات بدون مخططات، ولكن هذا ليس بالضرورة حلاً سيئًا.
بالنسبة لحالتك، لا أرى سببًا لضرورة ذلك تمامًا.لماذا لا تقوم فقط بتجزئة كلمة المرور beforeCreate
وحفظه مرة أخرى إلى password
?
beforeCreate: function (values, cb) {
values.password = hash(values.password);
return cb();
}