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.

4 respuestas a “Restringir el acceso de usuarios a uno por dispositivo en Laravel”

  1. Avatar de Seo Sellers

    I seriously love your site.. Excellent colors & theme.
    Did you build this web site yourself? Please reply back as I’m
    attempting to create my own personal website and would
    like to know where you got this from or exactly what the theme is named.

    Kudos!

    1. Avatar de Victor Santillan

      Yes, we created this blog.

      The theme is “Nook.” If you’re interested in having us design your website, send me a message.

      Best regards,

  2. Avatar de seo marketplace

    Quality posts is the key to attract the viewers to pay a visit the web page, that’s
    what this site is providing.

    1. Avatar de Victor Santillan

      Thanks for your comment!

Deja un comentario

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