MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Convalida personalizzata di Mongoose per la password

Dal momento che non dovresti salvare una password semplice nel tuo database, non ha senso convalidare la password nel database. Perché dovresti prima eseguire l'hashing della password e poi salvarla. la password con hash sarà una stringa complessa che molto probabilmente supererà la convalida per essere salvata nel database.

Quindi devi convalidare la password sul lato client. per questo puoi usare il pacchetto joi npm.

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

ecco come puoi implementarlo.

userModel.js //dovrebbe trovarsi nella cartella models

 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;

dimostrerò come utilizzare questa funzione all'interno di un router postale.

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