MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Mongoose benutzerdefinierte Validierung für das Passwort

Da Sie kein einfaches Passwort in Ihrer Datenbank speichern sollen, ist es nicht sinnvoll, das Passwort in der Datenbank zu validieren. Denn Sie sollten das Passwort zuerst hashen und dann speichern. Das gehashte Passwort ist eine komplexe Zeichenfolge, die höchstwahrscheinlich die Validierung besteht, um in der Datenbank gespeichert zu werden.

Sie müssen also das Passwort auf der Clientseite validieren. dafür können Sie das joi npm Paket verwenden.

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

So können Sie es implementieren.

userModel.js //sollte im Modellordner sein

 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;

Ich werde demonstrieren, wie man diese Funktion in einem Post-Router verwendet.

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