问题描述
我有一个看起来像这样的 userSchema
:
I have a userSchema
that looks like this:
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 模式验证密码/确认密码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!