‫Narrador: Bienvenido al último video de esta sección.
‫Y en
‫este, vamos a prevenir la contaminación
‫de parámetros, usando otro paquete de NPM.
‫Pero antes de instalar ese paquete, sigamos adelante
‫y echemos un vistazo al error.
‫Pero antes de hacer eso, vayamos a Postman y
‫veamos por qué realmente
‫necesitamos prevenir la contaminación de parámetros en primer lugar.
‫Entonces, primero, debemos iniciar sesión.
‫Bien, entonces, con este usuario y esta contraseña.
‫Así que ahora podemos usar la ruta Obtener todos los recorridos.
‫Muy bien, lo que voy a hacer
‫ahora aquí es agregar algunos parámetros a la cadena de consulta.
‫Veamos, quiero ordenar por duración y,
‫al mismo tiempo, también quiero ordenar por precio.
‫Y en realidad no tiene mucho sentido
‫porque estamos preparados para tener un solo parámetro de clasificación.
‫Entonces, veamos qué obtenemos con esto.
‫Y, de hecho, obtenemos un error al decir esto. querystring. clasificar. dividir no es una función.
‫Y eso está sucediendo en apiFeatures. js en la línea 23.
‫Así que abramos eso y aquí, en la línea 23
‫es donde ocurre ese error.
‫Entonces está tratando de dividir la propiedad de clasificación aquí,
‫que esperamos que sea una cadena.
‫Pero en este momento, dado que
‫lo definimos dos veces, ordene una vez y luego ordene dos
‫veces, express creará una matriz con estos dos valores, duración y precio.
‫Déjame mostrarte eso.
‫Consola. Iniciar sesión.
‫Ahora lo estoy copiando.
‫De acuerdo, inténtalo de nuevo.
‫Aquí está el mismo error
‫y, como dije, en realidad es una matriz con duración y precio.
‫Y eso, por supuesto, no podemos dividir porque dividir solo
‫funciona con cadenas, ¿de acuerdo?
‫Y este es un problema típico
‫que los atacantes pueden utilizar.
‫Muy bien, y básicamente ahora vamos
‫a usar un middleware que simplemente eliminará estos
‫campos duplicados, ¿de acuerdo?
‫Y ese, vamos a instalarlo.
‫Se llama HPP,
‫que significa contaminación de parámetros HTTP.
‫Está bien.
‫Vamos a requerirlo rápidamente aquí.
‫Muy bien, este es otro muy simple.
‫Todo lo que tenemos que hacer es la aplicación. usar y luego llamar a HPP.
‫Por lo tanto, evite la contaminación de los parámetros.
‫Y este de nuevo debería usarse aquí al final, está
‫bien, porque lo que hace es aclarar la
‫cadena de consulta, ¿de acuerdo?
‫Intentémoslo de nuevo.
‫Está tomando un poco de tiempo y aquí vamos.
‫Entonces, el error desapareció y ahora solo está
‫usando el último.
‫Así que ahora está ordenando mi precio
‫y, de hecho, comenzamos con el más bajo y
‫luego subimos 497, hasta llegar al más caro de
‫casi 3000, ¿de acuerdo?
‫Entonces eso es algo fijo, pero en realidad queremos algunas
‫propiedades o campos duplicados en algunos casos, ¿verdad?
‫Por ejemplo, es posible que deseemos buscar recorridos con una
‫duración de nueve y cinco.
‫Entonces, recuerde que en nuestra API,
‫podemos hacer esto, por lo que la duración es igual a
‫cinco, y podemos decir, al mismo tiempo, duración nueve, ¿de acuerdo?
‫Y queremos que esto realmente funcione, pero en este momento no es así.
‫Solo encuentra la gira con nueve días, ¿verdad?
‫Pero si no lo hubiéramos hecho, o el middleware HPP.
‫Así que desactivémoslo.
‫Entonces, si no lo tuviéramos activo,
‫entonces encontraríamos tres recorridos, uno
‫con duración cinco, luego aquí con duración nueve y aquí
‫otro con duración cinco.
‫Bien, y en este caso, este es en
‫realidad el comportamiento esperado.
‫Entonces, ¿qué podemos hacer para poder usar el middleware
‫pero aún así obtener este
‫resultado que esperamos aquí? Con la duración,
‫podemos hacer una lista blanca de algunos parámetros, ¿de acuerdo?
‫Entonces, en esta función HPP, podemos pasar una vez
‫más un objeto y luego allí, especificar la lista blanca, ¿de acuerdo?
‫Y la lista blanca es simplemente una matriz de propiedades para
‫las que realmente permitimos duplicados en la cadena de consulta.
‫¿Okey?
‫Y la duración es, por supuesto, uno de ellos, ¿de acuerdo?
‫Intentémoslo de nuevo.
‫Y así, en este momento todavía obtenemos nuestros tres resultados como antes.
‫Pero si lo probamos con sort, y creemos
‫una nueva pestaña aquí.
‫Entonces, si lo probamos con
‫estos tipos dobles, tampoco deberíamos obtener ningún error.
‫Bueno, ahora no hemos iniciado sesión, así que obtengamos
‫nuestro token de error aquí.
‫Inténtelo de nuevo.
‫Y ahora, de hecho, funciona, no obtenemos ningún error.
‫Y el middleware de HPP está haciendo su trabajo.
‫¿Está bien?
‫También cierre este,
‫y ahora también deberíamos especificar algunos otros campos
‫en nuestra lista blanca, porque por ejemplo
‫queremos buscar este también, o la cantidad de calificaciones.
‫Así que copiemos todos aquí en nuestra lista blanca.
‫Así que el promedio también.
‫Luego también la duración
‫que ya tenemos, y digamos el tamaño máximo del grupo.
‫También podríamos querer la dificultad.
‫Y también el precio.
‫Y creo que eso debería ser suficiente.
‫Está bien.
‫Y puede parecer
‫un poco extraño poner básicamente aquí todos los nombres de campo manualmente y luego
‫podríamos tener que hacer lo mismo con los otros recursos,
‫y eso hará que esta lista blanca sea aún más grande, ¿verdad?
‫Y, por supuesto, podríamos hacer algunas cosas complejas aquí para
‫obtener estos nombres de campo del modelo en
‫sí, pero una vez más,
‫solo quiero que sea simple aquí, ¿de acuerdo?
‫Entonces, solo estoy definiendo manualmente estos nombres
‫de campo aquí y luego lo llamo un día, ¿de acuerdo?
‫De acuerdo, y eso realmente
‫concluye nuestra sección de autenticación, autorización y seguridad.
‫Y si quieres divertirte un poco más con eso,
‫entonces, por supuesto, puedes intentar implementar algunas de las cosas
‫que sugerí en ese video resumen
‫que te mostré antes con esa diapositiva con
‫todas estas diferentes medidas de seguridad
‫que ya implementamos y algunos
‫de los cuales les dije que experimentaran.
‫Así que siéntete libre de hacer eso,
‫o si no, bueno, pasemos juntos a
‫la siguiente sección que será realmente emocionante nuevamente porque entonces
‫realmente comenzaremos a modelar los
‫datos y aprenderemos algunas cosas más avanzadas de MongoDB.
‫Así que no puedo esperar a verte allí.