‫Instructor: Muy bien, ahora creemos esos nuevos
‫usuarios, basados en el modelo que acabamos de
‫implementar en el último video.
‫Por lo tanto, haremos la mayoría de las cosas
‫relacionadas con el usuario, como crear nuevos usuarios,
‫iniciar sesión o actualizar contraseñas en el controlador de autenticación.
‫Entonces, todo lo que está relacionado con la autenticación, en
‫realidad, no estará en el controlador de
‫usuario que realmente creamos
‫antes, sino que crearemos un controlador de autenticación.
‫Entonces, todas las funciones
‫relacionadas con la autenticación irán aquí.
‫Y esto tendrá un poco más de sentido más
‫adelante, cuando comencemos a usar todas las funciones
‫que voy a poner aquí.
‫Y ahora, lo primero que
‫debemos hacer es importar nuestro usuario,
‫entonces nuestro modelo de usuario, por supuesto,
‫y eso está en un nivel superior, luego debería estar en modelos, y
‫luego en userModel.
‫Está bien.
‫Entonces, creemos y exportemos nuestro primer controlador.
‫Y voy a llamar a este registro.
‫Y entonces ves que no lo llamo crear usuario, como
‫lo hice en un controlador de
‫recorrido, pero realmente lo llamo registro porque ese
‫es el nombre que tiene un poco más de
‫significado en el contexto de la autenticación.
‫Así que será una función asíncrona, por supuesto, porque haremos
‫algunas operaciones en la base de datos.
‫Luego solicite, responda y luego como
‫siempre, y luego aquí es donde creamos el nuevo usuario.
‫Y eso es muy similar a lo que hicimos antes.
‫Entonces, esta vez se llama newUser,
‫y luego recuerda
‫cómo creamos un nuevo documento basado en un modelo.
‫Entonces usamos el nombre del modelo,
‫por supuesto, que en este caso es
‫Usuario, y luego usamos el método de creación.
‫Y luego todo lo que
‫tenemos que hacer es pasar un objeto con los datos
‫a partir de los cuales se debe crear el usuario.
‫Y así, al igual que antes, esos datos están realmente en req. cuerpo.
‫Entonces, todo esto devolverá una Promesa, por
‫lo que debemos esperar eso, y esa es
‫la razón por la que esta es una función asincrónica.
‫Y veo que aquí arriba, necesitamos exportaciones.
‫Y ahora, en el
‫siguiente paso, enviaremos ese nuevo usuario al cliente.
‫Entonces res. status, que es 201 para creado, y
‫luego nuestro objeto JSON.
‫Entonces eso es éxito nuevamente,
‫y luego nuestra propiedad de datos que nuevamente se llama
‫un sobre aquí,
‫por lo que una propiedad que contendrá los datos en sí.
‫Y los datos ahora se llaman usuario,
‫cuando antes se llamaban tour,
‫entonces lo que vamos a enviar aquí es el newUser.
‫Guárdelo y, antes de probar esto, recuerde
‫que se trata de una función asíncrona, por lo
‫que debemos pensar en el manejo de errores aquí.
‫Entonces, ¿qué tenemos que hacer aquí?
‫Bueno, necesitamos envolver toda esta función que
‫acabamos de crear en la función catchAsync que creamos
‫en la última sección.
‫Así que recuerde cómo hicimos eso en tourController, donde todas las funciones
‫que son asincrónicas están envueltas en esta
‫función catchAsync para que no tengamos que escribir el
‫bloque try
‫catch en todas y cada una de las funciones aquí.
‫¿Recuerdas eso de la última sección?
‫De hecho, voy a
‫seguir adelante y copiar esta declaración obligatoria aquí.
‫Entonces, un poco perezoso
‫a veces, no tengo ganas de escribir el mismo
‫código una y otra vez, así que atrapaAsync, y luego
‫tenemos que cerrar eso aquí mismo al final.
‫Y ahora, todo lo
‫que tenemos que hacer es implementar la ruta
‫para que se pueda llamar a este controlador de registro aquí.
‫Y entonces vayamos a nuestras
‫userRoutes, que en realidad ya creamos en algún momento antes,
‫y ya tenemos algunas rutas aquí.
‫Pero en realidad voy a crear uno nuevo aquí ahora.
‫Y como mencioné al principio de este video, el recurso
‫del usuario es un poco diferente de
‫todos los demás recursos.
‫Nuevamente, porque realmente tiene que ver con todo
‫lo relacionado con la autenticación.
‫Y entonces tenemos un controlador diferente para
‫eso, así que el authController, los nombres de las funciones también
‫tienen algunos nombres diferentes,
‫por lo que en realidad también tendremos una ruta especial.
‫Digamos enrutador. post, y luego crearemos
‫una ruta para el registro, entonces / signup, y luego
‫aquí es donde usaremos esa
‫función que acabamos de crear antes.
‫Y, por supuesto, antes
‫de que podamos hacer eso, debemos requerir ese controlador de autenticación.
‫Entonces, simplemente dupliquemos esta línea
‫aquí y reemplacemos al usuario en dos lugares, y aquí
‫tenemos nuestro authController, y ahora
‫usaremos eso. inscribirse.
‫Entonces, como
‫puede ver, el registro es realmente un punto final especial.
‫No encaja con la arquitectura REST
‫de la que hablamos antes, porque en este
‫caso no tiene mucho sentido.
‫Y recuerde cómo dijimos que en algunos
‫casos especiales, por supuesto,
‫podemos crear otros puntos finales que no
‫se ajustan al 100% a esa filosofía REST que básicamente se implementa aquí.
‫Entonces, esto aquí, por supuesto, sigue
‫al 100% la filosofía REST, donde el nombre de la URL no tiene nada
‫que ver con la acción que realmente se realiza.
‫Mientras que aquí arriba, por supuesto, lo ha hecho.
‫Entonces, el nombre de la ruta es
‫registro porque estamos registrando usuarios.
‫Y también aquí abajo hemos implementado
‫todos estos warps HTTP diferentes,
‫pero aquí para registrarse, solo necesitamos POST.
‫Por lo tanto, realmente no podemos obtener datos del registro, o
‫no podemos parchear un registro, así que no lo actualice.
‫Realmente no tiene sentido, por lo que en este caso todo
‫lo que queremos
‫hacer es tener una ruta para
‫el registro, donde solo podamos publicar datos.
‫Porque nuevamente, tiene sentido
‫enviar datos a esta ruta, para
‫que luego se cree el nuevo usuario.
‫Y tendremos diferentes rutas similares a esta, como
‫para iniciar sesión, o para
‫restablecer contraseña, y todo tipo de cosas por el estilo.
‫Y también mantendremos estas rutas
‫aquí para que estén en un formato más REST,
‫porque también existe la posibilidad de que un
‫administrador del sistema actualice o elimine
‫u obtenga todos los usuarios en función de su ID.
‫Pero nos ocuparemos de eso más adelante, por ahora solo queremos
‫implementar todas las funciones que tienen que
‫ver con la autenticación.
‫Entonces, básicamente, funciones que solo son relevantes
‫para el usuario.
‫Así que no es un administrador el que va a registrar
‫a un usuario, o no es un administrador el que va a
‫iniciar la sesión de un usuario, sino que es el
‫propio usuario el que se registrará o iniciará la sesión él mismo.
‫Vale, ¿eso tiene sentido?
‫Entonces, deberíamos tener todo en su lugar
‫ahora, de modo que ahora debería funcionar cuando creemos nuestro nuevo usuario.
‫Entonces, cuando nos registramos básicamente, para nuestra aplicación.
‫Intentémoslo ahora.
‫Copiemos esta URL,
‫usuarios y luego, regístrate.
‫Luego necesitamos especificar el Cuerpo,
‫decimos sin formato y luego JSON.
‫Ah, y también, por supuesto, no olvide configurar este
‫en POST.
‫Entonces, ¿qué datos necesitamos aquí?
‫Recuerde, primero es el
‫nombre, luego el correo electrónico, y
‫en realidad estoy poniendo el mío aquí, luego la contraseña, así
‫que hagamos algo aquí, realmente no importa.
‫Y nuevamente, hablaremos sobre la administración de contraseñas
‫un poco más tarde
‫y, de hecho, en el siguiente video.
‫Así que ahora este de aquí debería ser el mismo.
‫Así que pase1234, solo como prueba.
‫Y el recuerdo de la foto no es obligatorio, por
‫lo que no voy a hacer eso.
‫Y veamos ahora.
‫Y ahora tenemos este
‫error aquí, y eso es porque escribí mal la contraseña aquí.
‫Bien, esa sería la forma alemana de escribirlo.
‫Y ahora está bien.
‫De acuerdo, y de hecho, tenemos a nuestro nuevo usuario aquí.
‫Perfecto.
‫Ahora digamos que intentamos hacer esto con un GET.
‫¿Qué obtendríamos?
‫Bueno, "Esta ruta
‫aún no está definida", lo cual
‫se debe a que en
‫realidad ya definimos esta ruta aquí, así que básicamente
‫esta parte aquí de la ruta, así
‫que permítanme mostrarles eso rápidamente, por lo que
‫no está en el tourController, sino en el userController.
‫Así que básicamente tenemos getUser aquí,
‫y luego "Esta ruta aún no está definida. "Así que ese es el que estamos obteniendo, pero,
‫por supuesto, no
‫estamos realmente interesados en eso.
‫Y ahora sigamos y guardemos esto aquí, para
‫Postman, para que podamos reutilizarlo fácilmente.
‫Así que regístrate.
‫Y ahora,
‫para confirmar rápidamente, abrámoslo en Compass
‫aquí también, y veamos que en este punto solo
‫tenemos recorridos, así que vayamos aquí a natours, intentemos volver
‫a cargar esto, y probablemente esté aquí arriba, y así. de hecho, ahora tenemos
‫nuestra colección de usuarios aquí.
‫Así que abramos eso, y de hecho, ahora tenemos
‫nuestro primer documento aquí.
‫Entonces, el usuario que acabamos de crear.
‫Ahora aquí puede ver la contraseña
‫simple y, por supuesto, eso no es lo ideal.
‫Y, por supuesto, eso no es ideal, por lo
‫que en una aplicación web,
‫las contraseñas nunca deben almacenarse como simples en una base de datos.
‫Entonces, hay mucha administración de contraseñas que debe realizarse
‫entre bastidores, y eso es exactamente lo que haremos
‫en el siguiente video.