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