Espera un momento ...
¿Te gustaría llevar mi curso de Laravel, gratis?
Sólo debes ingresar tus datos:
Tienes un proyecto Laravel, y una cuenta de administrador.
Tienes múltiples roles (tipos de usuario) en tu aplicación.
¿Te ha pasado alguna vez que quieres iniciar sesión como uno de tus usuarios?
Esto es algo muy fácil de implementar.
En este artículo vamos a ver cómo, en 3 sencillos pasos.
La idea es definir 2 rutas nuevas.
Para iniciar y finalizar el proceso de "suplantación", respectivamente.
Puedes llamar a las rutas como tú prefieras.
Una alternativa es así:
Route::get('/users/{user}/impersonate/start', [ImpersonateController::class, 'start']);
Route::get('/users/impersonate/stop', [ImpersonateController::class, 'stop']);
Como ves, tenemos 2 rutas, ambas resueltas por el mismo controlador 👀.
Puedes crear un controlador rápidamente con el siguiente comando Artisan:
php artisan make:controller Admin\ImpersonateController
Lo importante es contar con un método start
y un método stop
:
class ImpersonateController extends Controller
{
public function start(User $user): RedirectResponse
{
session()->put('impersonated_by', auth()->id());
Auth::login($user);
return redirect('/');
}
public function stop(): RedirectResponse
{
Auth::loginUsingId(session()->pull('impersonated_by'));
return redirect('/admin');
}
}
De tal manera que puedas:
Para verificar el funcionamiento simplemente debes visitar la página correspondiente a tus rutas.
Por ejemplo:
/users/7/impersonate/start
para iniciar sesión como el usuario con id 7./users/7/impersonate/stop
para dejar de suplantar y volver a tu sesión como administrador.Si bien la característica ya se encuentra implementada, con lo descrito anteriormente, y funciona, hay detalles que debes tener en cuenta.
Por ejemplo, ¿quiénes pueden personificar usuarios?
Lo usual es que sólo los administradores tengan acceso.
Para ello puedes definir un grupo de rutas, y asignar un middleware para asegurar que sólo usuarios admin tengan acceso.
Route::group([
'middleware' => ['auth', 'admin'],
'prefix' => 'admin'
], function () {
// Aquí tu ruta que inicia la suplantación
});
// Aquí tu ruta que detiene (ya que puedes suplantar un usuario que no necesariamente es admin)
Además de eso, para aumentar la seguridad, puedes definir tus rutas usando el verbo POST, en vez de GET.
Eso hará que tus enlaces no sean accesibles directamente, ya que van a requerir de un CSRF token.
Aunque funciona, visitar tus rutas manualmente, no es muy cómodo.
Como cereza del pastel, puedes agregar unos botones, para facilitar la navegación.
¿Qué debes agregar a tu vista?
Eso dependerá mucho de tu proyecto.
Una opción es agregar un formulario POST, con un CSRF token y un button type submit.
En el siguiente video puedes ver la implementación completa:
Comparte este post si te fue de ayuda 🙂.
Regístrate
Accede a todos los cursos, y resuelve todas tus dudas.
Cursos Recomendados
Aprende Laravel desde cero y desarrolla aplicaciones web reales, en tiempo récord, de la mano de Laravel.
Iniciar cursoActualiza tus proyectos desde cualquier versión hasta la última versión estable de Laravel.
Iniciar cursoDesarrollemos un Messenger! Aprende sobre Channels, Queues, Vuex, JWT, Sesiones, BootstrapVue y mucho más.
Iniciar cursoEspera un momento ...
¿Te gustaría llevar mi curso de Laravel, gratis?
Sólo debes ingresar tus datos: