Как указать поле, которое можно проверять, но нельзя сохранять в 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