‫-: Entonces, después de la actualización, ahora también permitiremos que el
‫usuario actual elimine básicamente su cuenta.
‫Ahora, cuando un usuario decide eliminar su
‫cuenta, en realidad no eliminamos ese documento de la base de datos.
‫Pero en lugar de eso, simplemente configuramos la cuenta como inactiva.
‫Para que el usuario pueda en
‫algún momento en el futuro reactivar la cuenta y también para
‫que podamos acceder básicamente a la cuenta en
‫el futuro, incluso si oficialmente, digamos que ha sido eliminada.
‫¿Okey?
‫Entonces, para implementar esto, primero
‫necesitamos crear una nueva propiedad en nuestro esquema.
‫Entonces, vayamos
‫allí.
‫Y ahora queremos
‫tener un campo llamado activo.
‫Bueno.
‫Que debería ser del
‫tipo booleano.
‫De acuerdo, y por
‫defecto
‫será cierto.
‫Entonces, cualquier usuario que se cree
‫nuevo es, por supuesto, un usuario activo
‫y, por lo tanto, el booleano se establece en verdadero.
‫Además, no queremos mostrar esto en la salida, está bien.
‫Porque básicamente queremos ocultar
‫este detalle de implementación al usuario.
‫¿Okey?
‫Y no queremos que nadie sepa
‫que esta bandera, entonces esta bandera activa está aquí, está bien.
‫Entonces decimos seleccionar, y lo configuramos como falso, de acuerdo.
‫Entonces, para
‫eliminar al usuario ahora, todo lo
‫que tenemos que hacer es
‫básicamente establecer esa bandera activa en falso.
‫Bueno.
‫Así que creemos esa función aquí,
‫exportaciones. deleteMe, entonces
‫era updateMe y
‫ahora es deleteMe
‫y
‫ya sabemos que estamos usando un catchAsync aquí, ¿verdad?
‫Y luego Async porque
‫básicamente ya sabemos que actualizaremos al usuario.
‫Entonces la solicitud responde
‫a continuación.
‫Entonces,
‫espera al usuario. buscar por ID y
‫actualizar.
‫De acuerdo, y nuevamente, por supuesto,
‫solo funciona para los usuarios registrados, por lo
‫que la ID de usuario se almacena convenientemente a pedido. usuario. identificación.
‫y los datos que queremos actualizar simplemente
‫están activos
‫y configurados en falso.
‫Está bien.
‫Ahora devolver la respuesta también es bastante fácil.
‫Usamos el código
‫204 para eliminado, lo que lo hará de modo que, en realidad, en
‫Postman ni siquiera veamos esta respuesta, está bien.
‫Pero aún lo enviamos junto con
‫la solicitud porque esa es siempre la mejor práctica.
‫Entonces, sigue siendo un éxito y luego recuerde
‫que no enviamos ningún dato.
‫Entonces, simplemente configúrelo en no.
‫Muy bien, y ahora, por supuesto, agréguelo también
‫a todas las rutas aquí.
‫Entonces eso es bastante similar.
‫Así que deleteMe y luego aquí deleteMe también
‫y ahora estamos usando el
‫método delete http.
‫De acuerdo, y nuevamente,
‫no eliminaremos un usuario de la base de datos.
‫Pero siempre que el usuario ya no sea accesible en cualquier lugar,
‫está bien usar este método http aquí.
‫Muy bien, probemos esto ahora.
‫De acuerdo, aunque todavía no estamos
‫100% listos, intentémoslo ahora.
‫Está bien, entonces, deleteMe y es
‫una ruta protegida, por lo que
‫debemos iniciar sesión y, por lo tanto,
‫creemos
‫nuestro encabezado de
‫autorización, Bearer Token
‫y, por supuesto, este y eso es todo.
‫No necesitamos pasar ningún dato en el cuerpo.
‫No necesitamos pasar ningún dato en la URL.
‫Muy bien, porque nuevamente, los únicos datos que se
‫necesitan es la identificación de usuario actual
‫y esa no está codificada dentro de nuestro token web adyacente.
‫¿Okey?
‫Entonces, lo que también debemos hacer es eliminar y sí, esto
‫debería funcionar ahora.
‫Entonces, antes de hacer eso,
‫obtengamos la lista de todos los usuarios.
‫Muy bien y el que estamos borrando ahora
‫es este último.
‫Así que este que acabamos de crear en la última conferencia.
‫De acuerdo, y estamos
‫trabajando con este porque es el último que inició sesión,
‫por lo que es este token aquí el que está
‫ahora almacenado en nuestra variable de token.
‫De acuerdo, cuando eliminemos al
‫usuario, se basará en la ID que proviene de este token.
‫Intentémoslo ahora.
‫Y de hecho obtenemos nuestro 204.
‫Y ahora lo que me
‫interesa es ver si la propiedad seleccionada aquí ha cambiado.
‫Y en realidad se ve exactamente igual aquí.
‫Y eso es porque no
‫estamos filtrando el campo de selección al usuario.
‫Y entonces realmente necesitamos verlo aquí.
‫Está bien y, de hecho, tenemos activo aquí establecido en falso.
‫Bien, eso es lo que quería decir antes.
‫Por lo tanto, no estamos filtrando los campos activos al
‫usuario, no al campo de selección.
‫Tan activo solo es visible para nosotros aquí en la
‫brújula, pero no para el usuario.
‫Ahora, como último paso, por supuesto
‫que no queremos mostrar a los usuarios inactivos
‫en esta salida, ¿verdad?
‫¿Y cómo crees que podríamos implementar esto?
‫Bueno, vamos a usar algo que está muy atrás y de
‫lo que hablamos hace dos o tres secciones, que
‫es el middleware de consultas, está bien.
‫Entonces, el middleware de consultas es perfecto para
‫esto porque ahora básicamente podemos agregar un paso
‫antes de cualquier otra consulta que estemos haciendo
‫en algún lugar de nuestra aplicación.
‫Así que vayamos a nuestro modelo de usuario
‫aquí y agreguemos ese middleware aquí.
‫Entonces userSchema. pre, entonces algo que sucederá antes de una consulta y
‫esa consulta será un hallazgo.
‫Bien, esto es lo que hace que esta consulta sea un middleware.
‫Luego una función regular porque recuerda que
‫de lo contrario no tendremos acceso a la discordia
‫o al menos no tendrá
‫el valor que esperamos
‫que tenga.
‫Y recuerde que aquí en realidad usamos una expresión regular antes
‫básicamente para decir que queremos
‫que esta función de middleware se aplique
‫a cada consulta que comience con find.
‫Así que no solo buscar, sino también cosas como buscar
‫y actualizar, buscar y eliminar, y todas las consultas por el estilo.
‫De acuerdo, usamos una expresión regular en
‫busca de palabras o cadenas que comiencen con encontrar.
‫Entonces eso es lo que hace este símbolo aquí.
‫Y luego finaliza la expresión regular.
‫Así que uno muy simple.
‫Este es el que incluso yo puedo
‫escribir sin ir primero a Google y
‫tratar de encontrarlo allí.
‫Bien, recuerde que esto es un
‫middleware de consultas y, por lo tanto, apunta
‫a la consulta actual.
‫Bien, entonces volvamos rápidamente aquí
‫para ver cómo funciona.
‫Por lo tanto,
‫tenemos la opción de obtener todos los usuarios aquí y, por supuesto, aquí tenemos una consulta de búsqueda.
‫Y ahora, antes
‫de que se ejecute esa consulta, queremos agregarle algo.
‫Lo cual es que solo queremos encontrar documentos que
‫tengan la propiedad activa configurada como verdadera.
‫De acuerdo, eso es fácil.
‫Aquí está.
‫Y
‫entonces esto. buscar y luego, por supuesto, nuestro objeto de filtro solo
‫documentos con activo
‫establecido en verdadero.
‫Y eso es.
‫Llamando al próximo middleware y listo.
‫Bien, y si ahora hacemos la
‫misma consulta, esta última ya no debería aparecer porque nuevamente tiene activa establecida
‫en falso.
‫Por tanto, no va a coincidir con la
‫consulta que acabamos de escribir.
‫Bien, ahora no tenemos ningún usuario aquí y
‫supongo que eso se debe a que los otros no
‫tienen explícitamente la propiedad activa establecida
‫en verdadero.
‫Y entonces hagamos lo que hicimos realmente en esa otra sección
‫donde decimos que activo no debe ser falso.
‫Bien, usamos el operador
‫no igual a y, por
‫supuesto, debería estar en su propio objeto.
‫Entonces no es igual a falso.
‫Bien, eso es bastante diferente aquí en este caso.
‫De acuerdo, todos los documentos donde
‫activo no es igual a falso ahora deberían aparecer y
‫los otros dos deberían estar de vuelta.
‫Y de hecho aquí están.
‫De acuerdo, así es como básicamente eliminamos
‫a nuestros usuarios sin eliminarlos de la base de datos.
‫Bien, no eliminaremos documentos, solo los
‫marcaremos como inactivos.
‫Bien, guardemos esto rápidamente aquí.
‫Eliminar usuario
‫actual.
‫Genial y con esto terminamos la
‫parte de autenticación y autorización de esta
‫sección.
‫Entonces, todo lo que estaba relacionado con estos
‫temas y también con los usuarios, como actualizar y eliminar usuarios.
‫Eso también forma parte de la autenticación
‫y la autorización.
‫Ahora, en el resto de esta
‫sección, hablaremos de seguridad porque, por supuesto,
‫también está relacionado con
‫la autenticación.
‫Bien, hablaremos sobre un
‫par de mejores prácticas y luego
‫también implementaremos algunas de ellas en nuestro proyecto.