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