如何指定可以验证但不存储在 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
不是架构的一部分,因此如果 migrate 设置为,则不会创建它 alter
或者 drop
, ,或者如果使用无模式数据库引擎?
我想要的实际用例是明文 password
从请求中验证字段,但使用 beforeCreate
填充一个 hash
实际存储的字段(但不允许 password
要存储在过程中的属性)。
谢谢。
解决方案
Waterline 不支持已验证但未持久化的瞬态字段。您可以添加 schema: true
属性添加到模型中,这将过滤掉任何未显式声明的属性,但仍使它们在生命周期回调中可用。您必须手动对这些属性进行验证(在 beforeCreate()
或者 beforeValidate()
例如),并且您将失去向无模式数据库添加任意字段的能力,但这不一定是一个糟糕的解决方案。
但对于你的情况,我不明白为什么这是完全必要的。为什么不直接将密码散列到 beforeCreate
并将其保存回 password
?
beforeCreate: function (values, cb) {
values.password = hash(values.password);
return cb();
}
不隶属于 StackOverflow