Por más pruebas que le realicemos a nuestra aplicación, siempre existen situaciones donde los usuarios nos reportan que el sistema no funciona como debería, y por mas que ingresemos al sistema con nuestro usuario de prueba, no podemos reproducir el error reportado.
Así que, que mejor manera de «robar» la identidad del usuario, iniciando sesión con sus datos y realizar las pruebas como si fuéramos él.? En esté artículo de Laravel tip vamos a ver como hacerlo.
Introducción
Sabemos que Laravel nos brinda muchas herramientas para testear nuestra aplicación haciendo que nuestro flujo de trabajo sea más fácil y preciso. Pero la mayoría de ellas no son visuales haciendo que se nos escapen los pequeños detalles.
Hacernos pasar por nuestros usuarios es una herramienta mas y una manera rápida de ver lo que el usuario ve y poder solucionar errores rápidamente.
Lo que haremos es suplantar a los usuarios y volver a nuestra sesión rápidamente cuando lo deseemos. ¡Empecemos!
Definiendo las Rutas necesarias
Vamos a definir dos rutas, una para la suplantación de identidad y otra para volver a nuestra sesión original. Ambas rutas llaman a diferentes métodos de un controlador y están contenidas por el middleware auth
para asegurarnos que estamos en un entorno de usuarios logueados.
Nota: Es importante definir la ruta de revertir antes que la ruta de suplantar. Si ponemos primero la ruta que tiene el parámetro {user}
, tomara la palabra «revertir» como un id de un usuario y daría error 404. Si definimos las rutas como en la imagen evitamos ese comportamiento.
Ahora vamos a desarrollar nuestro controlador donde estará la magia ✨.
Definiendo Controlador para suplantar usuarios
Creamos un controlador con los métodos que definimos en las rutas del punto anterior con el siguiente código.
Explicando el código del Controlador
El método suplantar()
recibe como parámetro $user
que es el id del usuario que le pasamos por la ruta y queremos suplantar. Gracias a la magia de Laravel, se carga el usuario que corresponde a dicho id.
En una variable auxiliar llamada $originalUser
guardamos el id del usuario logueado actualmente (o sea, seriamos nosotros mismos). Si el usuario que vino por parámetro (usuario a suplantar) es distinto al id del usuario original (nosotros mismos), entonces se realiza el robo de identidad.
Para esto, guardamos los datos del usuario original en una variable de sesión y nos logueamos con el usuario que enviamos por parámetro. Fuck yeah! 🤘
El método revertir()
es muy sencillo. Lo que hacemos es capturar los datos del usuario que habíamos guardado en la sesión, lo logueamos y borramos el dato de la sesión. Listo, volvimos a ser nosotros mismos.
Para tener en cuenta
Este es un simple ejemplo para que se entienda la lógica del «robo» de identidad que podríamos aplicar en nuestro sistema. Pero debes tener en cuenta que debes agregarle más seguridad, ya que cualquier usuario que conozca estas rutas podría hacer un desastre en nuestro sistema. Te recomendaría que crees una lógica de autorización (con Gates por ejemplo) para que solo algunos usuarios tengan acceso a esta funcionalidad.
Otro punto para tener en cuenta es que nosotros mismos podríamos olvidarnos que estamos logueados como otro usuario y podríamos hacer acciones pensando que somos el usuario original, así que, ponte un cartel bien grande que te informe que estas logueado con el usuario de otra persona.
Conclusión
Esta es una idea sacada de WordPress que suele ser útil cuando queres identificarte como otro usuario para hacer pruebas, ya sea que tiene asignado otro perfil o rol y ni te acuerdas su usuario y contraseña. Espero que les haya gustado este truco y nos vemos en la próxima.