私は経路をテストするためにPostmanを使用していますが、パスワードが長すぎると言うuser.save((err)=>{})
の後にエラーメッセージが返されます。私が作成したpasswordValidator
を使用していますが、私は明らかにSchemaではなくこのルートのために呼び出さなかったのです。Mongooseで間違ったバリデータを使用して経路を設定します
私は間違っていますか?
マングースにおけるユーザー・スキーマ:
const userSchema=new Schema({
email: { type: String, required: true, unique: true, lowercase: true, validate: emailValidators},
username: { type: String, required: true, unique: true, lowercase: true, validate: usernameValidators},
bio: { type:String,default:null,validate:bioValidators},
location: {type:String, default:null},
gender: {type:String,default:null,validate:genderValidators},
birthday: { type:String,default:null},
password: { type: String, required: true,validate: passwordValidators}
});
ルート:
EDIT
ここでパスワードのバリデータの配列が
const passwordValidators = [
{
validator: passwordLengthChecker,
message: 'Password must be at least 5 characters but no more than 40'
},
{
validator:validPassword,
message: 'Must have at least one uppercase, lowercase, special character, and number'
}
];
です
とチェッカー
let passwordLengthChecker = (password)=>{
if (!password) {
return false;
}
else{
if(password.length<5 || password.length>40){
return false;
}
else{
return true;
}
}
};
let validPassword = (password)=>{
if (!password) {
return false;
}
else{
const regExp = new RegExp(/^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?[\d])(?=.*?[\W]).{8,35}$/);
return regExp.test(password);
}
};
あなたはそれがない
EDITのN°2
私はちょうど私がちょうどスキーマ
の下に、このミドルウェアを持って実現しなければならないのに、それがpasswordLengthCheckerを使用しています見ることができるようにuserSchema.pre('save', function(next){
if(!this.isModified('password'))
return next();
bcrypt.hash(this.password, null, null, (err,hash)=>{
if(err) return next(err);
this.password=hash;
next();
});
});
save()を使用するたびにこの関数が実行されるのでしょうか?
'検証:passwordValidators'これは問題ではありませんか?あなたはpasswordValidatorsに何を使用していますか?私たちを見せてもらえますか? –
ここにバリデーター –
の回答を確認してください。あなたはユーザーのパスワードを提供することを忘れている@Azoulayジェイソン –