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.

Enviar correo de almacenamiento local y solicitud de publicación de correo electrónico nuevo con axios.

Estoy tratando de cambiar el correo electrónico del usuario actualmente conectado.

Básicamente tengo un campo donde ingreso mi “nuevo” correo electrónico (código del componente):

const [email, setEmail] = useState("");
.........

<input type="email" placeholder="{user.email}" onchange="{(e)" ==""> setEmail(e.target.value)}/>

Mi petición POST de axios en el componente:

const changeEmail = async () => {
    try {
        const res = await axios.post("/auth/change/", {
            email: email
        }, {
            headers: {
                token:
                    "Bearer "+JSON.parse(localStorage.getItem("user")).accessToken,
            },
        }).then(r => console.log(r)).catch(err => console.log(err))
    } catch (err) {
        console.log(err);
    }
};

Mi archivo actual de server/routes/auth.js:

router.post("/change", verify , async (req, res) => {
    if(req.body.email === '' || !(req.body.email.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/g))){
        res.status(400).json("Email no válido")
    }
    try {
        User.findOne({
            where: {
                email: JSON.parse(localStorage.getItem("user")).email
            },
        }).then((user) => {
            if(user === null) {
                console.log("correo electrónico no encontrado en la base de datos")
                res.status(403).json("Email no válido")
            } else {
;               user.update({
                email : req.body.email
                })
            }
        })
    } catch (err) {
        console.log(err)
        res.status(500).json(err);
    }
});

Mi idea era buscar el correo electrónico de ‘localStorage’ en la base de datos y, si se encontraba, actualizar el usuario con el nuevo correo electrónico establecido en ‘useState’. Pero obviamente ‘localStorage’ no es utilizable en la API. ¿Existe alguna manera de enviar el correo electrónico antiguo y el nuevo al hacer la petición POST en la API?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, puedes enviar tanto el antiguo como el nuevo correo electrónico en la solicitud POST de la API. Una forma de hacerlo es incluyendo el antiguo correo electrónico en el encabezado de tu solicitud Axios. Por ejemplo:

    const changeEmail = async () => {
        try {
            const user = JSON.parse(localStorage.getItem("user"));
            const res = await axios.post("/auth/change/", {
                email: email
            }, {
                headers: {
                    token: `Bearer ${user.accessToken}`,
                    oldEmail: user.email
                },
            });
            console.log(res);
        } catch (err) {
            console.log(err);
        }
    };
    

    En tu archivo server/routes/auth.js, luego puedes recuperar el antiguo correo electrónico desde el encabezado de la solicitud de la siguiente manera:

    router.post("/change/", verify, async (req, res) => {
        const oldEmail = req.headers.oldemail;
        const newEmail = req.body.email;
        if (newEmail === '' || !(newEmail.match(/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/g))) {
            res.status(400).json("Correo electrónico no válido");
        }
        try {
            const user = await User.findOne({
                where: {
                    email: oldEmail
                }
            });
            if (!user) {
                console.log("correo electrónico no encontrado en la base de datos");
                res.status(403).json("Correo electrónico no válido");
            } else {
                await user.update({
                    email: newEmail
                });
                res.sendStatus(200);
            }
        } catch (err) {
            console.log(err);
            res.status(500).json(err);
        }
    };
    

    Nota: También debes considerar implementar medidas de seguridad adicionales, como la validación del token JWT en el lado del servidor y la autenticación de la base de datos, para asegurarte de que solo los usuarios autorizados puedan cambiar su correo electrónico.

Comments are closed.