使用Mongoose模式验证密码/确认密码 [英] Validating password / confirm password with Mongoose schema
问题描述
我有一个 userSchema
,如下所示:
var userSchema = new Schema({
name: {
type: String
, required: true
, validate: [validators.notEmpty, 'Name is empty']
}
, username: {
type: String
, required: true
, validate: [validators.notEmpty, 'Username is empty']
}
, email: {
type: String
, required: true
, validate: [
{ validator: validators.notEmpty, msg: 'Email is empty' }
, { validator: validators.isEmail, msg: 'Invalid email' }
]
}
, salt: String
, hash: String
});
到目前为止,我的所有验证都在模式中发生,我想知道如何去通过密码验证实现此目的。用户将密码输入两个字段,模型应该检查它们是否相同。
All of my validation is happening in the schema so far, and I'm wondering how to go about achieving this with password validation. The user inputs the password into two fields, and the model should check that they are the same as each other.
这种验证是否属于模式?我是新来的这种验证。
Does this kind of validation belong in the schema? I'm new to this sort of validation.
如何验证密码?
推荐答案
我最终发现可以使用虚拟路径和 invalidate
函数的组合来实现这一点,如这个要点,用于匹配密码的相同目的: https://gist.github.com/1350041
I eventually discovered that you can use a combination of virtual paths and the invalidate
function to achieve this, as shown in this gist, for the very same purpose of matching passwords: https://gist.github.com/1350041
直接引用:
CustomerSchema.virtual('password')
.get(function() {
return this._password;
})
.set(function(value) {
this._password = value;
var salt = bcrypt.gen_salt_sync(12);
this.passwordHash = bcrypt.encrypt_sync(value, salt);
});
CustomerSchema.virtual('passwordConfirmation')
.get(function() {
return this._passwordConfirmation;
})
.set(function(value) {
this._passwordConfirmation = value;
});
CustomerSchema.path('passwordHash').validate(function(v) {
if (this._password || this._passwordConfirmation) {
if (!val.check(this._password).min(6)) {
this.invalidate('password', 'must be at least 6 characters.');
}
if (this._password !== this._passwordConfirmation) {
this.invalidate('passwordConfirmation', 'must match confirmation.');
}
}
if (this.isNew && !this._password) {
this.invalidate('password', 'required');
}
}, null);
这篇关于使用Mongoose模式验证密码/确认密码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!