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.

Implementar la función de contraseña olvidada, buscar y si el correo electrónico existe, enviar correo electrónico en Node.JS no funciona como se esperaba.

Quiero hacer algo así: cuando un usuario busca en una base de datos de mongoDB y el usuario existe, debe enviar un correo electrónico al usuario con un enlace de restablecimiento de contraseña. Por alguna razón, no funciona como se esperaba. Simplemente continúa enviando correos electrónicos y no comprueba si el correo electrónico existe, no sé por qué se comporta así.

Mi código se ve así:

Pero esto no verifica nada, simplemente continúa y envía el correo electrónico. Necesito ayuda aquí.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para asegurarse de que el email sólo se envíe cuando el usuario existe, puede agregar una condición para verificar si el objeto user existe antes de enviar el email. Aquí tienes un fragmento de código actualizado:

    exports.forgot_pass = function(req,res,next){
    
        User.findOne({
            user_email : req.body.user_email
        }).exec((err,user)=>{
            if(err){
                res.status(500).send({message : err});
                return;
            }
            if(!user){
                res.status(400).send({message: "Lo siento, ¡el correo electrónico no existe!"});
            }else{
                var user_email = req.body.user_email;
                const transporter = nodemailer.createTransport({
                    service:'gmail',
                    host: 'smtp.gmail.com',
                    port:'587',
                    auth:{
                        user: '**************@gmail.com',
                        pass: '***********'
                    },
                    secureConnection: 'false',
                    tls: {
                        ciphers: 'SSLv3',
                        rejectUnauthorized: false
                    }
                });
    
                if(user.email_verified){
                    const mailOptions = {
                        from :'***********@gmail.com',
                        to: user_email,
                        subject: 'Restablecer su contraseña, por favor',
                        html : '<h3>Estimado usuario,</h3>Ha solicitado restablecer su contraseña. Para restablecer su contraseña con éxito, haga clic en el enlace siguiente:
    
    Click <a href="https://**********/user/resetPassword.jsp">https://**********/user/resetPassword.jsp</a>
    
    Este correo electrónico está sujeto a instrucciones obligatorias.
    
    Atentamente,
    
    <p>Servicio en línea</p>'
                    };
    
                    transporter.sendMail(mailOptions,function(error,info){
                        if(error)throw error;
                        return res.send({error:false, data: info, message: 'OK'});
                    })
               }else{
                    res.status(400).send({message: "Lo siento, ¡su correo electrónico no ha sido verificado!"});
               }
            }
        });
    
    };
    

    En este código actualizado, agregamos una condición para verificar si el usuario existe:

    if(!user){
        res.status(400).send({message: "Lo siento, ¡el correo electrónico no existe!"});
    }else{
       // enviar correo electrónico aquí
    }
    

    Esto asegura que si user no existe, la función no procederá a enviar un email.

    Además, agregamos una condición para verificar si el correo electrónico del usuario ha sido verificado (if(user.email_verified)). Esto se debe a que, en algunos casos, es posible que no desee enviar un enlace para restablecer la contraseña a una dirección de correo electrónico no verificada. Si el correo electrónico del usuario no está verificado, la función devolverá un código de estado de 400 y un mensaje de “Lo siento, ¡su correo electrónico no ha sido verificado!”.

Comments are closed.