{"id":168,"date":"2024-05-28T14:05:02","date_gmt":"2024-05-28T20:05:02","guid":{"rendered":"https:\/\/www.mariatech.com.mx\/blog\/?p=168"},"modified":"2024-05-28T14:11:09","modified_gmt":"2024-05-28T20:11:09","slug":"restringir-el-acceso-de-usuarios-a-uno-por-dispositivo-en-laravel","status":"publish","type":"post","link":"https:\/\/www.mariatech.com.mx\/blog\/laravel-php\/restringir-el-acceso-de-usuarios-a-uno-por-dispositivo-en-laravel\/","title":{"rendered":"Restringir el acceso de usuarios a uno por dispositivo en Laravel"},"content":{"rendered":"<p>Cuando trabajamos con el <em>Framework <\/em>de <em>Laravel<\/em> y la autentificaci\u00f3n 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\u00f3n).<br \/>En algunas ocasiones es necesario restringir ese acceso a que sea una \u00fanica sesi\u00f3n abierta por usuario en un solo equipo, para resolver esto podemos usar la funci\u00f3n &#8220;<strong>logoutOtherDevices<\/strong>&#8221; que viene incluida desde la versi\u00f3n 5.6 de <em>Laravel.<\/em><\/p>\n<p><strong>logoutOtherDevices:<\/strong> Invalida la sesi\u00f3n del usuario en otro dispositivos, lo saca de la cuenta y solo mantiene la sesi\u00f3n actual del dispositivo que se est\u00e1 utilizando.<\/p>\n<p>1- Integrar el <em>middleware <\/em>&#8220;<strong>auth.session<\/strong>&#8221; a la ruta o grupo de rutas donde se requiere tener acceso a la aplicaci\u00f3n<\/p>\n\n\n<pre class=\"wp-block-code\"><code>Route::middleware(&#91;'auth',<strong>'<\/strong>auth.session'])->group(function () {\n\/\/Aqu\u00ed van todas tus rutas\n}<\/code><\/pre>\n\n\n<p>2- Verificar que tenemos activo el <em>middleware <\/em>de &#8220;<strong>auth.session<\/strong>&#8220;<br \/>Para eso nos iremos a nuestro archivo &#8220;<strong>\/app\/http\/kernel.php<\/strong>&#8220;, y asegurarnos que el arreglo &#8220;<strong>$middlewareAliases<\/strong>&#8221; tenga los valores:<\/p>\n\n\n<pre class=\"wp-block-code\"><code>protected $middlewareAliases = &#91;\n'auth.session' =&gt; \\Illuminate\\Session\\Middleware\\AuthenticateSession::class,\n];<\/code><\/pre>\n\n\n<p>Nota: Debes tener m\u00e1s valores en el array, aqu\u00ed solo te mostramos del que estamos hablando.<\/p>\n<p>3- Agregar la funci\u00f3n para ejecutar el proceso de cerrar las otras sesiones<br \/>Esto lo haremos en el controlador de autentificaci\u00f3n &#8220;<strong>\/app\/Http\/Controllers\/Auth\/AuthenticatedSessionContoller.php<\/strong>&#8220;,\u00a0 agregamos la funci\u00f3n &#8220;<strong>authenticated<\/strong>&#8221; (pueden usar otro nombre para la funci\u00f3n)<\/p>\n\n\n<pre class=\"wp-block-code\"><code>\/**\n* authenticated Logout other devices\n* @param string $current_password\n*\/\nprotected function authenticated($current_password) {\n  Auth::logoutOtherDevices($current_password);\n}<\/code><\/pre>\n\n\n<p>4- Incluir la llamada de la funci\u00f3n cuando el usuario ya se autentific\u00f3 en la aplicaci\u00f3n<\/p>\n\n\n<pre class=\"wp-block-code\"><code>\/**\n* Handle an incoming authentication request.\n*\/\npublic function store(LoginRequest $request): RedirectResponse\n{\n  $request-&gt;authenticate();\n  $request-&gt;session()-&gt;regenerate();\n  $this-&gt;authenticated($request-&gt;password);\n  return redirect()-&gt;intended(RouteServiceProvider::HOME);\n}<\/code><\/pre>\n\n\n<p>5- Limpiamos la cache de las rutas para que nos detecte la aplicaci\u00f3n las modificaciones<\/p>\n\n\n<pre class=\"wp-block-code\"><code>php artisan route:cache<\/code><\/pre>\n\n\n<p>Referencias<\/p>\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/laravel.com\/docs\/10.x\/authentication#invalidating-sessions-on-other-devices\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/laravel.com\/docs\/10.x\/authentication#invalidating-sessions-on-other-devices<\/a><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/laracasts.com\/discuss\/channels\/laravel\/logout-users-from-other-devices\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/laracasts.com\/discuss\/channels\/laravel\/logout-users-from-other-devices<\/a><\/p>\n\n\n<p>Si te ayud\u00f3 este contenido no olvides dejarnos tu comentario, bye.<\/p>","protected":false},"excerpt":{"rendered":"<p>Aplica la funci\u00f3n &#8220;logoutOtherDevices&#8221; para restringir el acceso de los usuarios a uno por dispositivo&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6],"tags":[16,23,24,25],"class_list":["post-168","post","type-post","status-publish","format-standard","hentry","category-laravel-php","tag-php","tag-laravel","tag-autentificacion","tag-seguridad"],"_links":{"self":[{"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/posts\/168","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/comments?post=168"}],"version-history":[{"count":0,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/posts\/168\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/media?parent=168"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/categories?post=168"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.mariatech.com.mx\/blog\/wp-json\/wp\/v2\/tags?post=168"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}