MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

Validation personnalisée de Mongoose pour le mot de passe

Étant donné que vous n'êtes pas censé enregistrer le mot de passe en clair dans votre base de données, cela n'a aucun sens de valider le mot de passe dans la base de données. Parce que vous devez d'abord hacher le mot de passe, puis l'enregistrer. le mot de passe haché sera une chaîne complexe qui passera très probablement la validation pour être enregistré dans la base de données.

Vous devez donc valider le mot de passe côté client. pour cela, vous pouvez utiliser le package joi npm.

https://www.npmjs.com/package/@hapi/joi

voici comment vous pouvez l'implémenter.

userModel.js //doit être dans le dossier des modèles

 const Joi = require('@hapi/joi');
 const mongoose = require("mongoose");

 //you defined your schema above, it should be **lowercase** 
 //here is the model, model should start capital letter 
 const User=mongoose.model("User",userSchema)

function validateUser(user) {
  const schema = Joi.object().keys({
    email: Joi.string()
      .min(8)
      .max(50)
      .required()
      .email(),
    password: Joi.string()
      .min(6)
      .required()
      .max(20)
      .regex(/^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[^a-zA-Z0-9]).{8,1024}$/) //special/number/capital
  });
  return Joi.validate(user, schema);
}

module.exports.User = User;
module.exports.validate = validateUser;

je vais vous montrer comment utiliser cette fonction dans un post-routeur.

userRoute.js

//import model and validate func
const { User, validate } = require("/models/user"); 

router.post("/", async (req, res) => {
  //validating the request here
  const { error } = validate(req.body);
  if (error) res.status(400).send(error.details[0].message);

  //i used this code to show you how to use validate function
  //i am not sure what is your project about
  });