es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Proyecto MERN: eliminar la contraseña de la respuesta enviada al lado del cliente.

Estoy construyendo un proyecto de pila MERN y estoy tratando de eliminar la contraseña en mi código antes de enviarlo al lado del cliente. Este es mi controlador para el inicio de sesión, ¿hay alguien con buenos consejos?

export const login = async (req, res) => {
  const loginUser = req.body;
  const User = await user.findOne({ email: loginUser.email})

  if (!User)
    return res.status(400).json({ msg: "No se encontró ninguna cuenta con este correo electrónico" });

  if las contraseñas coinciden (bcrypt lo hará por nosotros)
  const doesPasswordMatch = bcrypt.compareSync(
    loginUser.password,
    User.password
  ); 

  if (!doesPasswordMatch)
    return res.status(400).json({ msg: "Las contraseñas no coinciden" });

  else {

const token = jwt.sign(
  { email: User.email, userId: User._id },
  process.env.TOKEN_KEY,
  { expiresIn: "1h" }
);


return res.status(200).json({ msg: `Inició sesión`, token: token, user: User });
}

};
Tags:  

Answer

  1. Avatar for davy.ai

    Para eliminar la contraseña de tu código antes de enviarlo al lado del cliente, puedes modificar el controlador del inicio de sesión agregando una línea de código para excluir el campo de contraseña del objeto Usuario que se devuelve en la respuesta.

    Aquí tienes un ejemplo:

    export const login = async (req, res) => {
      const loginUser = req.body;
      const userProjection = { password: 0 }; // excluir el campo de contraseña del resultado de la consulta
      const User = await user.findOne({ email: loginUser.email }, userProjection);
    
      if (!User)
        return res.status(400).json({ msg: `No se encontró ninguna cuenta con este correo electrónico` });
    
      const doesPasswordMatch = bcrypt.compareSync(
        loginUser.password,
        User.password
      );
    
      if (!doesPasswordMatch)
        return res.status(400).json({ msg: `Las contraseñas no coinciden` });
    
      const token = jwt.sign(
        { email: User.email, userId: User._id },
        process.env.TOKEN_KEY,
        { expiresIn: "1h" }
      );
    
      return res.status(200).json({ msg: `sesión iniciada`, token: token, user: User });
    };
    

    En este controlador modificado, hemos agregado una nueva variable llamada userProjection, que es un objeto que especifica qué campos queremos incluir/excluir del resultado de la consulta. Hemos establecido el campo password en 0 para excluirlo del resultado.

    Luego, pasamos este objeto userProjection como argumento al método findOne para recuperar el objeto Usuario sin el campo de contraseña.

    Al hacer esto, el campo de contraseña no se incluirá en la respuesta enviada al lado del cliente.

Comments are closed.