我正在查看水线文档here中的示例。
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
属性。)
感谢。
答案 0 :(得分:1)
Waterline不支持经验证但未持久化的瞬态字段。您可以将schema: true
属性添加到模型中,这将使其过滤掉未明确声明的任何属性,但仍然可以在生命周期回调中使用它们。您必须手动对这些属性进行验证(例如,在beforeCreate()
或beforeValidate()
中),并且您将失去向无模式dbs添加任意字段的能力,但它不一定是坏的溶液
对于你的情况,我不明白为什么它是完全必要的。为什么不在beforeCreate
中哈希密码并将其保存回password
?
beforeCreate: function (values, cb) {
values.password = hash(values.password);
return cb();
}