كيف أحدد حقلاً يمكن التحقق من صحته ولكن لا يمكن تخزينه في Waterline؟

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'
    }
  }
});

هل هناك طريقة لإخبار 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();

}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top