Entonces, en mi caso, después de que un usuario elige una determinada habitación, la cantidad de noches que se hospedará y la cantidad de invitados, se calcula el precio (dependiendo de ciertos factores) y luego se los redirige a la página de pago donde verán el precio total, que el usuario puede cambiar manipulando el parámetro de precio en la url.
en la página de reserva:
<Link to={"/book?pricetotal="+total_prices+"&title="+title+"&img="+img+"&price="+price+"&checkin="+checkkin+"&checkout="+checkkout+"&idr="+idroom} >y en la página de pago que estoy usando
const windowUrl = window.location.search; const params = new URLSearchParams(windowUrl);y luego obtengo el parámetro usando
params.get('price')La solución que encontré es cifrar el contenido del parámetro Url y luego descifrarlo. ¿La solución es lo suficientemente efectiva o hay otras formas de implementarla?
Cualquier cosa en el cliente puede ser potencialmente interceptada y manipulada por alguien lo suficientemente interesado. Es probable que el cifrado no sea suficiente si está realmente preocupado por la seguridad porque el usuario podría examinar el código que genera el enlace y tal vez aplicarle ingeniería inversa.
No se puede confiar en nada hecho en el cliente. En cambio, cuando el usuario hace sus elecciones:
después de que un usuario elige una determinada habitación, la cantidad de noches que se hospedará y la cantidad de invitados
Guarde estos datos del lado del servidor y proporcione al usuario una ID de sesión si aún no tiene una. Luego, cuando llegue el momento de que paguen, puede calcular el lado del servidor total y luego mostrárselo al usuario de alguna manera. Sí, no lo pongas en los parámetros de URL, porque es muy fácil que alguien se equivoque, incluso sin querer, pero ponerlo, por ejemplo, en respuesta a una solicitud de búsqueda o en un elemento de datos en la página funcionaría.
Cuando el usuario ingrese su información de pago y la envíe, use su ID de sesión para determinar cuál fue el precio de lo que eligió. Con este enfoque, incluso si alguien decide meterse con el script del lado del cliente para mostrar otra cosa, no afectará el precio final; solo arruinará su vista (y si lo hace, cualquier confusión que resulte está sobre ellos).
Eso no va a funcionar, ya que está cifrando y descifrando en la interfaz.
Una solución viable sería enviar los productos en lugar del precio de los productos. Luego, cuando envíe la solicitud de pago al backend, envíe también los productos y, en el backend, calcule cuánto cobrar al usuario.
Mi solución fue pasar accesorios en link react-router
<Link to={{pathname:`/book`,state: { total_prices,title,img,price,checkkin,checkkout,idroom },}} >y acceder a ellos en mi otro componente de función usando
const location = useLocation() console.log(location.state)