Duration 3:54:44

Curso de Node.js + Express + MongoDB (parte 02) - Auth + Session + Passport + Rutas protegidas

14 317 watched
0
521
Published 7 Mar 2022

Bienvenidos a la segunda entrega del curso de Node JS para principiantes, paso a paso y desde cero. Aquí aprenderemos a realizar la autenticación de usuarios utilizando sessions de express, además configuraremos rutas protegidas, enviaremos correos electrónicos y más. Curso de Node.js Parte #01: /watch/8dC3K-MyHkxy3 *** Login, Register, Hash password *** 0:00:00 Introducción a esta sección 00:05:11 Formulario Login y Registro 00:27:54 Schema y Modelo User 00:39:12 Guardar user en DB 00:50:24 Hash contraseña 01:03:51 Confirmar cuenta 01:14:37 Login controller 01:24:10 Resumen de esta sección *** Express Validator, Session, Flash, Passport *** 01:26:50 Configuraciones previas 01:34:41 Express Session 01:49:11 Session Flash 01:55:38 Express Validator 02:14:31 Mensaje Flash 02:31:01 Raid MouredevApps 02:31:54 Passport 02:44:40 Middleware verificar user *** CSRF Protection, Ref MongoDB, Nodemailer *** 02:59:38 Introducción a esta sección 03:00:18 CSRF Protection 03:12:35 Rutas protegias y Flash 03:19:23 Ref MongoDB 03:22:35 Validate ref user Read URL 03:25:43 Validate ref user Create URL 03:28:46 Validate ref user Remove URL 03:33:43 Validate ref user Update URL 03:39:20 Nodemailer enviar email 03:53:07 Despedida y próximas secciones 👌 Guía de códigos y teoría: https://bit.ly/3iBIvW3 👌 Curso en Udemy: https://bit.ly/3lNnPeh 👌 Curso completo de Javascript (playlist): https://bit.ly/3nEs6mh 👌 Discord: https://discord.com/invite/hcG7NBvsGD Links: 💩 Guía Master (todos los cursos): https://bluuweb.github.io/ 💩 Todos los cursos aquí: /bluuweb 💩 Suscríbete al canal de bluuweb aquí: https://bit.ly/3kLYAqr 💩 ¿Cómo hago las guías de códigos? /watch/QrTs9vOGU35Gs #express #nodejs #clasesConBluuweb ¿Quiéres apoyar el canal? 🧨Curso de HTML + CSS + Bootstrap 5 + Git y más [UDEMY] https://curso-bootstrap-5-udemy.bluuweb.cl 🧨Curso Vue.js + Firebase [UDEMY] https://curso-vue-js-udemy.bluuweb.cl 🧨Curso React.js + Firebase [UDEMY] https://curso-react-js-udemy.bluuweb.cl 🧨Curso HTML y CSS [GRATIS] https://www.udemy.com/course/curso-html5-css3 🧨Cursos en oferta Udemy https://ofertas.bluuweb.cl 🧨Cafecito para bluuweb: https://www.paypal.me/bluuweb Conviértete en miembro de este canal para disfrutar de ventajas 😍: 💩 /channel/UCH7IANkyEcsVW_y1IlpkamQ/join Redes Sociales: 💩 https://bluuweb.org 💩 https://discord.gg/ZrQAJnD7K8 💩 https://www.twitch.tv/bluuweb 💩 https://www.instagram.com/bluuweb_youtube 💩 https://www.facebook.com/bluuweb 💩 https://twitter.com/bluuweb ¿Necesitas un curso en Udemy? Al comprar cualquier curso en Udemy con el siguiente enlace http://bit.ly/2OQr3gM estarás apoyando a bluuweb 😍 Aquí puedes revisarlos: http://bit.ly/2OQr3gM

Category

Show more

Comments - 37
  • @
    @bluuweb2 years ago Curso FullStack de Javascript: 6
  • @
    @chistoperez2 years ago Error: req requires a callback function ...
    Hace unos días se actualizó Passport la versión 0.6.0 que mejora la robustez contra clases de ataques de fijación de sesión .
    Por lo cual ahora la función de logout requiere una función de callback y quedaría así
    const cerrarSesion = (req, res) => {
    req.logout(function (err) {
    if (err) {
    return next(err);
    }
    res.redirect("/auth/login");
    });
    };
    ...
    18
  • @
    @GonzaAhrexd2 years ago Muchas gracias, me está sirviendo un montón para el proyecto de mi escuela!!!
  • @
    @lilycode26542 years ago Esperando mientras sigo estudiando react estoy en estado de
    Un componente valor nos vemos desde Chile
    1
  • @
    @GabrielMartinez-ez9ue2 years ago Muchas gracias! yo voy a utilizar esta información para ver como la uso con Postgres! 2
  • @
    @Deus-lo-Vuilt2 years ago Aqui esperando el estreno :D , Gracias Nacho por tanto 1
  • @
    @oscar_cornejo2 years ago Algún capitulo para roles de usuarios? 2
  • @
    @jesusquintanaesquiliche98082 years ago No habia tenido tiempo de seguir todos los directos y he vuelto a repasar con este video tutorial. Simplemente magistral, sigue así 2
  • @
    @Christian-zo4gg8 months ago Buenas, vengo del futuro (07/09/2023), algunas dependencias se han actualizado y no funcionan exactamente igual como se hizo en el video, aquí dejo la solución:
    1. nanoid.
    nanoid esta en su versión 4.0.2 y ahora sólo funciona con ES Modules, para usar con Common JS se debe usar la versión 3x, instalar con: npm install --save nanoid@3.
    2. Función logout() de passport.
    (Esto se lo copio a un compañero que escribió en los comentarios llamado @chistoperez).
    passport se actualizó la versión 0.6.0 y ahora en la función de logout se requiere una función de callback para que funcione:
    const logoutUser = (req, res) => {
    req.logout( (err) => {
    if(err) return next(err)
    });
    return res.redirect('/auth/login')
    };
    3. csurf.
    A partir del 13 de Septiembre del 2022 csurf fue completamente deprecado por su creador (quedo obsoleto y fue retirado de NPM) debido a que tenia muchas vulnerabilidades en la seguridad y estaba muy desactualizado con los nuevos requerimientos, además de que los nuevos frameworks ya traen mejores sistemas de seguridad por defecto. Van a encontrar otras librerías con el nombre parecido, pero lo que mas se sugiere es usar la librería Helmet de express o la del framework que estén utilizando.
    4. Función remove() de Mongoose.
    En versiones más recientes de Mongoose, se ha considerado obsoleto, y se recomienda utilizar deleteOne() o deleteMany() para eliminar documentos.
    En la constante de eliminarUrl del archivo homeController.js, sustituir "await url.remove();" por "await Url.deleteOne({ _id: id });".
    ...
    2
  • @
    @jimmypedraza4339 months ago Profe puedo utilizar passport y jwt la vez o es mejor utilizar uno solo, como es la manera correcta?
  • @
    @IvanAponzalast year Cordial saludos dev
    tengo un error en el custom para validar el repite password, me dice que no puede leer una propiedad undefine en el body
    views/register.hbs
    <input type="password" name="repassword" placeholder="Repita Password", class="form-control mb-2" value="12345">
    routes/auth.js
    body("password", "Contraseña de mínimo 5 caracteres")
    .trim()
    .isLength({ min: 5 })
    .escape()
    .custom((value, { request }) => {
    console.log(request.body.repassword)
    if (value !== request.body.repassword) {
    throw new Error("No coinciden las contraseñas");
    } else {
    return value;
    }
    })
    response.json
    {
    "type": "field",
    "value": "12345",
    "msg": "Cannot read properties of undefined (reading 'body')",
    "path": "password",
    "location": "body"
    }
    ]
    no he podido validar la contraseña
    ...
  • @
    @zangetzu83032 years ago hola tengo una consulta puedo usar mongoDB para un proyecto de inventario, clientes, proveedores, servicios, o deberia usar Mysql. 1
  • @
    @alexisbustamante79502 years ago Tio Nacho, Me gustaría saber como hace esas paginas de documentación, hay alguna plantilla , sería genial aprenderlo!!! , actualmente estoy usando VUE con Node y postgresql 1
  • @
    @joancursos7762 years ago Express-validator -> custom -> password
    Creo que hay un posible problema al usar la opcion .escape() en el password.
    Si pongo un password como este: 111&111, al "escapar" el password lo transforma en 111&amp;111.
    Esto conlleva que el password "escapado" no coincide con el password de confirmacion (que no esta "escapado"), por lo que seria necesario "escapar" también el password de confirmación no aceptar el caracter '&' en el password
    Al "escapar" el password en el login no se genera ningún problema
    Si se hace una validación con RegEx, bien sea, en el modelo (directamente en el esquema o en un method personalizado o de alguna otra forma), es necesario que el RegEx admita el ';', de otra forma, al tener que validar "&amp;" dará error.
    Creo.
    ...
  • @
    @davidelbicho0772 years ago no me deja instalar el bycryptjs :( y en la parte 1 del turorial tampoco me deja instalar el nanoid :( ayudaaaaaa
  • @
    @bluuweb2 years ago Curso FullStack de Javascript: 6
  • @
    @chistoperez2 years ago Error: req requires a callback function ...
    Hace unos días se actualizó Passport la versión 0.6.0 que mejora la robustez contra clases de ataques de fijación de sesión .
    Por lo cual ahora la función de logout requiere una función de callback y quedaría así
    const cerrarSesion = (req, res) => {
    req.logout(function (err) {
    if (err) {
    return next(err);
    }
    res.redirect("/auth/login");
    });
    };
    ...
    18
  • @
    @oscar_cornejo2 years ago Algún capitulo para roles de usuarios? 2
  • @
    @lilycode26542 years ago Esperando mientras sigo estudiando react estoy en estado de
    Un componente valor nos vemos desde Chile
    1
  • @
    @jesusquintanaesquiliche98082 years ago No habia tenido tiempo de seguir todos los directos y he vuelto a repasar con este video tutorial. Simplemente magistral, sigue así 2
  • @
    @GonzaAhrexd2 years ago Muchas gracias, me está sirviendo un montón para el proyecto de mi escuela!!!
  • @
    @Deus-lo-Vuilt2 years ago Aqui esperando el estreno :D , Gracias Nacho por tanto 1
  • @
    @zangetzu83032 years ago hola tengo una consulta puedo usar mongoDB para un proyecto de inventario, clientes, proveedores, servicios, o deberia usar Mysql. 1
  • @
    @GabrielMartinez-ez9ue2 years ago Muchas gracias! yo voy a utilizar esta información para ver como la uso con Postgres! 2
  • @
    @IvanAponzalast year Cordial saludos dev
    tengo un error en el custom para validar el repite password, me dice que no puede leer una propiedad undefine en el body
    views/register.hbs
    <input type="password" name="repassword" placeholder="Repita Password", class="form-control mb-2" value="12345">
    routes/auth.js
    body("password", "Contraseña de mínimo 5 caracteres")
    .trim()
    .isLength({ min: 5 })
    .escape()
    .custom((value, { request }) => {
    console.log(request.body.repassword)
    if (value !== request.body.repassword) {
    throw new Error("No coinciden las contraseñas");
    } else {
    return value;
    }
    })
    response.json
    {
    "type": "field",
    "value": "12345",
    "msg": "Cannot read properties of undefined (reading 'body')",
    "path": "password",
    "location": "body"
    }
    ]
    no he podido validar la contraseña
    ...
  • @
    @jimmypedraza4339 months ago Profe puedo utilizar passport y jwt la vez o es mejor utilizar uno solo, como es la manera correcta?
  • @
    @joancursos7762 years ago Express-validator -> custom -> password
    Creo que hay un posible problema al usar la opcion .escape() en el password.
    Si pongo un password como este: 111&111, al "escapar" el password lo transforma en 111&amp;111.
    Esto conlleva que el password "escapado" no coincide con el password de confirmacion (que no esta "escapado"), por lo que seria necesario "escapar" también el password de confirmación no aceptar el caracter '&' en el password
    Al "escapar" el password en el login no se genera ningún problema
    Si se hace una validación con RegEx, bien sea, en el modelo (directamente en el esquema o en un method personalizado o de alguna otra forma), es necesario que el RegEx admita el ';', de otra forma, al tener que validar "&amp;" dará error.
    Creo.
    ...
  • @
    @Christian-zo4gg8 months ago Buenas, vengo del futuro (07/09/2023), algunas dependencias se han actualizado y no funcionan exactamente igual como se hizo en el video, aquí dejo la solución:
    1. nanoid.
    nanoid esta en su versión 4.0.2 y ahora sólo funciona con ES Modules, para usar con Common JS se debe usar la versión 3x, instalar con: npm install --save nanoid@3.
    2. Función logout() de passport.
    (Esto se lo copio a un compañero que escribió en los comentarios llamado @chistoperez).
    passport se actualizó la versión 0.6.0 y ahora en la función de logout se requiere una función de callback para que funcione:
    const logoutUser = (req, res) => {
    req.logout( (err) => {
    if(err) return next(err)
    });
    return res.redirect('/auth/login')
    };
    3. csurf.
    A partir del 13 de Septiembre del 2022 csurf fue completamente deprecado por su creador (quedo obsoleto y fue retirado de NPM) debido a que tenia muchas vulnerabilidades en la seguridad y estaba muy desactualizado con los nuevos requerimientos, además de que los nuevos frameworks ya traen mejores sistemas de seguridad por defecto. Van a encontrar otras librerías con el nombre parecido, pero lo que mas se sugiere es usar la librería Helmet de express o la del framework que estén utilizando.
    4. Función remove() de Mongoose.
    En versiones más recientes de Mongoose, se ha considerado obsoleto, y se recomienda utilizar deleteOne() o deleteMany() para eliminar documentos.
    En la constante de eliminarUrl del archivo homeController.js, sustituir "await url.remove();" por "await Url.deleteOne({ _id: id });".
    ...
    2
  • @
    @davidelbicho0772 years ago no me deja instalar el bycryptjs :( y en la parte 1 del turorial tampoco me deja instalar el nanoid :( ayudaaaaaa
  • @
    @alexisbustamante79502 years ago Tio Nacho, Me gustaría saber como hace esas paginas de documentación, hay alguna plantilla , sería genial aprenderlo!!! , actualmente estoy usando VUE con Node y postgresql 1
  • @
    @bluuweb2 years ago Curso FullStack de Javascript: 6
  • @
    @chistoperez2 years ago Error: req requires a callback function ...
    Hace unos días se actualizó Passport la versión 0.6.0 que mejora la robustez contra clases de ataques de fijación de sesión .
    Por lo cual ahora la función de logout requiere una función de callback y quedaría así
    const cerrarSesion = (req, res) => {
    req.logout(function (err) {
    if (err) {
    return next(err);
    }
    res.redirect("/auth/login");
    });
    };
    ...
    18
  • @
    @GonzaAhrexd2 years ago Muchas gracias, me está sirviendo un montón para el proyecto de mi escuela!!!
  • @
    @lilycode26542 years ago Esperando mientras sigo estudiando react estoy en estado de
    Un componente valor nos vemos desde Chile
    1
  • @
    @GabrielMartinez-ez9ue2 years ago Muchas gracias! yo voy a utilizar esta información para ver como la uso con Postgres! 2
  • @
    @Deus-lo-Vuilt2 years ago Aqui esperando el estreno :D , Gracias Nacho por tanto 1
  • @
    @oscar_cornejo2 years ago Algún capitulo para roles de usuarios? 2
  • @
    @jesusquintanaesquiliche98082 years ago No habia tenido tiempo de seguir todos los directos y he vuelto a repasar con este video tutorial. Simplemente magistral, sigue así 2
  • @
    @Christian-zo4gg8 months ago Buenas, vengo del futuro (07/09/2023), algunas dependencias se han actualizado y no funcionan exactamente igual como se hizo en el video, aquí dejo la solución:
    1. nanoid.
    nanoid esta en su versión 4.0.2 y ahora sólo funciona con ES Modules, para usar con Common JS se debe usar la versión 3x, instalar con: npm install --save nanoid@3.
    2. Función logout() de passport.
    (Esto se lo copio a un compañero que escribió en los comentarios llamado @chistoperez).
    passport se actualizó la versión 0.6.0 y ahora en la función de logout se requiere una función de callback para que funcione:
    const logoutUser = (req, res) => {
    req.logout( (err) => {
    if(err) return next(err)
    });
    return res.redirect('/auth/login')
    };
    3. csurf.
    A partir del 13 de Septiembre del 2022 csurf fue completamente deprecado por su creador (quedo obsoleto y fue retirado de NPM) debido a que tenia muchas vulnerabilidades en la seguridad y estaba muy desactualizado con los nuevos requerimientos, además de que los nuevos frameworks ya traen mejores sistemas de seguridad por defecto. Van a encontrar otras librerías con el nombre parecido, pero lo que mas se sugiere es usar la librería Helmet de express o la del framework que estén utilizando.
    4. Función remove() de Mongoose.
    En versiones más recientes de Mongoose, se ha considerado obsoleto, y se recomienda utilizar deleteOne() o deleteMany() para eliminar documentos.
    En la constante de eliminarUrl del archivo homeController.js, sustituir "await url.remove();" por "await Url.deleteOne({ _id: id });".
    ...
    2
  • @
    @jimmypedraza4339 months ago Profe puedo utilizar passport y jwt la vez o es mejor utilizar uno solo, como es la manera correcta?
  • @
    @IvanAponzalast year Cordial saludos dev
    tengo un error en el custom para validar el repite password, me dice que no puede leer una propiedad undefine en el body
    views/register.hbs
    <input type="password" name="repassword" placeholder="Repita Password", class="form-control mb-2" value="12345">
    routes/auth.js
    body("password", "Contraseña de mínimo 5 caracteres")
    .trim()
    .isLength({ min: 5 })
    .escape()
    .custom((value, { request }) => {
    console.log(request.body.repassword)
    if (value !== request.body.repassword) {
    throw new Error("No coinciden las contraseñas");
    } else {
    return value;
    }
    })
    response.json
    {
    "type": "field",
    "value": "12345",
    "msg": "Cannot read properties of undefined (reading 'body')",
    "path": "password",
    "location": "body"
    }
    ]
    no he podido validar la contraseña
    ...
  • @
    @zangetzu83032 years ago hola tengo una consulta puedo usar mongoDB para un proyecto de inventario, clientes, proveedores, servicios, o deberia usar Mysql. 1
  • @
    @alexisbustamante79502 years ago Tio Nacho, Me gustaría saber como hace esas paginas de documentación, hay alguna plantilla , sería genial aprenderlo!!! , actualmente estoy usando VUE con Node y postgresql 1
  • @
    @joancursos7762 years ago Express-validator -> custom -> password
    Creo que hay un posible problema al usar la opcion .escape() en el password.
    Si pongo un password como este: 111&111, al "escapar" el password lo transforma en 111&amp;111.
    Esto conlleva que el password "escapado" no coincide con el password de confirmacion (que no esta "escapado"), por lo que seria necesario "escapar" también el password de confirmación no aceptar el caracter '&' en el password
    Al "escapar" el password en el login no se genera ningún problema
    Si se hace una validación con RegEx, bien sea, en el modelo (directamente en el esquema o en un method personalizado o de alguna otra forma), es necesario que el RegEx admita el ';', de otra forma, al tener que validar "&amp;" dará error.
    Creo.
    ...
  • @
    @davidelbicho0772 years ago no me deja instalar el bycryptjs :( y en la parte 1 del turorial tampoco me deja instalar el nanoid :( ayudaaaaaa