Cuando trabajamos con el Framework de Laravel y la autentificación de usuarios, por default las sesiones de los usuarios se quedan abiertas en todos los dispositivos(lo que dura el tiempo de vida la sesión).
En algunas ocasiones es necesario restringir ese acceso a que sea una única sesión abierta por usuario en un solo equipo, para resolver esto podemos usar la función “logoutOtherDevices” que viene incluida desde la versión 5.6 de Laravel.

logoutOtherDevices: Invalida la sesión del usuario en otro dispositivos, lo saca de la cuenta y solo mantiene la sesión actual del dispositivo que se está utilizando.

1- Integrar el middleware auth.session” a la ruta o grupo de rutas donde se requiere tener acceso a la aplicación

Route::middleware(['auth','auth.session'])->group(function () {
//Aquí van todas tus rutas
}

2- Verificar que tenemos activo el middleware de “auth.session
Para eso nos iremos a nuestro archivo “/app/http/kernel.php“, y asegurarnos que el arreglo “$middlewareAliases” tenga los valores:

protected $middlewareAliases = [
'auth.session' => \Illuminate\Session\Middleware\AuthenticateSession::class,
];

Nota: Debes tener más valores en el array, aquí solo te mostramos del que estamos hablando.

3- Agregar la función para ejecutar el proceso de cerrar las otras sesiones
Esto lo haremos en el controlador de autentificación “/app/Http/Controllers/Auth/AuthenticatedSessionContoller.php“,  agregamos la función “authenticated” (pueden usar otro nombre para la función)

/**
* authenticated Logout other devices
* @param string $current_password
*/
protected function authenticated($current_password) {
  Auth::logoutOtherDevices($current_password);
}

4- Incluir la llamada de la función cuando el usuario ya se autentificó en la aplicación

/**
* Handle an incoming authentication request.
*/
public function store(LoginRequest $request): RedirectResponse
{
  $request->authenticate();
  $request->session()->regenerate();
  $this->authenticated($request->password);
  return redirect()->intended(RouteServiceProvider::HOME);
}

5- Limpiamos la cache de las rutas para que nos detecte la aplicación las modificaciones

php artisan route:cache

Referencias

https://laravel.com/docs/10.x/authentication#invalidating-sessions-on-other-devices

https://laracasts.com/discuss/channels/laravel/logout-users-from-other-devices

Si te ayudó este contenido no olvides dejarnos tu comentario, bye.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Bienvenido

Logo

En es blog encontrarás artículos sobre desarrollo web, tecnologías de la información y marketing digital.
Si te sirvió nuestro contenido déjanos tu comentario.