Quiero que todas las URLs que están autenticadas tengan como parte del path al usuario logueado en la forma de "/user/123" (donde "123" es el id del usuario logueado). Quiero que inmediatamente después de estar autenticado un usuario, todas las URLs tengan esa forma. ¿Te parece una buena práctica? ¿Cómo se hace?
No, en general, no es una buena práctica que todas las URLs autenticadas incluyan el ID del usuario en el path
de forma obligatoria.
Si bien podría parecer una forma directa de segmentar el contenido, esta estrategia introduce varias desventajas significativas que afectan el rendimiento, la escalabilidad y la arquitectura de tu aplicación.
Por qué no es una buena práctica
Impacto en el Caching: Las URLs que incluyen el ID del usuario no se pueden almacenar en caché a nivel de servidor o CDN. Cada usuario tiene una URL única (
/user/123/dashboard
vs./user/456/dashboard
), lo que significa que el servidor no puede servir una versión común de la página. Esto aumenta la carga del servidor y la latencia para cada solicitud, ya que cada una debe ser procesada individualmente.Violación del Diseño RESTful: En un diseño RESTful, una URL debe identificar un recurso, no el usuario que lo solicita. El servidor ya sabe quién eres a través de la sesión o el token de autenticación. Incluir el ID en la URL es redundante y crea URLs artificiales que no representan el recurso subyacente de manera limpia.
Complejidad de Mantenimiento: Cada vez que generes una URL (
link
oform action
), tendrás que recordar agregar el ID del usuario. Esto hace que tu código sea más propenso a errores y más difícil de mantener a medida que la aplicación crece.Redireccionamiento Extra: Forzar un
redirect
después del login para agregar el ID del usuario añade una solicitud HTTP extra, lo que aumenta la latencia antes de que el usuario vea la primera página.
La forma estándar y recomendada de manejar este tipo de lógica es permitir que el servidor obtenga el ID del usuario desde la sesión (auth()->id()
) o un token, y luego usar ese ID para recuperar los datos correctos del usuario, sin necesidad de que el ID esté en la URL.
Cómo se hace (con sus riesgos)
A pesar de las desventajas, si decides proceder con esta estrategia, la forma más limpia de implementarla en Laravel es mediante el redirect después del login y el uso de un prefijo de ruta.
1. Configurar la redirección después del login
Por defecto, Laravel redirige a /home
o a la URL que le especifiques en la propiedad redirectTo
. Puedes anular esto con el método redirectTo()
para crear la URL personalizada.
auth()->user()->id
obtendrá el ID del usuario autenticado y construirá la URL de forma dinámica.
2. Definir las rutas con un prefijo
Todas las rutas que necesiten el ID del usuario deben estar dentro de un grupo de rutas con un prefijo dinámico.
Con esta configuración, la URL se construye como tú la necesitas. Sin embargo, en tu controlador, tendrás que recordar que el ID del usuario también se te pasa como un parámetro de la ruta ({user}
en este caso) que, aunque Laravel lo tenga disponible en auth()->user()
, también puede ser accedido a través de la firma del método de la siguiente manera:
En resumen, si bien es posible implementarlo, te recomiendo fuertemente que optes por la convención estándar de Laravel: usar el ID del usuario autenticado a través de la sesión, sin incluirlo en las URLs.
No hay comentarios:
Publicar un comentario