sql >> Base de Datos >  >> NoSQL >> MongoDB

Mongoose validación personalizada para contraseña

Dado que se supone que no debe guardar una contraseña simple en su base de datos, no tiene sentido validar la contraseña en la base de datos. Porque primero debe codificar la contraseña y luego guardarla. la contraseña cifrada será una cadena compleja que muy probablemente pasará la validación para guardarse en la base de datos.

Por lo tanto, debe validar la contraseña en el lado del cliente. para esto puedes usar el paquete joi npm.

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

así es como puedes implementarlo.

userModel.js //debe estar en la carpeta de modelos

 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;

Demostraré cómo usar esta función dentro de un enrutador posterior.

rutausuario.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
  });