{"id":620,"date":"2025-09-30T21:54:57","date_gmt":"2025-10-01T02:54:57","guid":{"rendered":"https:\/\/blog.pirulug.com\/?p=620"},"modified":"2025-09-30T21:54:57","modified_gmt":"2025-10-01T02:54:57","slug":"autenticacion-en-laravel-con-bootstrap-y-gestion-de-usuarios","status":"publish","type":"post","link":"https:\/\/blog.pirulug.com\/?p=620","title":{"rendered":"Autenticaci\u00f3n en Laravel con Bootstrap y Gesti\u00f3n de Usuarios"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Laravel es uno de los frameworks PHP m\u00e1s utilizados para construir aplicaciones modernas. Una de las tareas m\u00e1s comunes al iniciar un proyecto es implementar un sistema de autenticaci\u00f3n. Aunque hoy en d\u00eda existen paquetes como Breeze o Jetstream, el paquete Laravel UI sigue siendo una opci\u00f3n ligera y directa, sobre todo si queremos integrar Bootstrap r\u00e1pidamente.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Instalaci\u00f3n de Laravel con Laravel UI y Bootstrap<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Para comenzar, creamos un nuevo proyecto en Laravel:<\/p>\n\n\n\n<pre class=\"wp-block-pirumatic-blocks\"><code class=\"language-bash\">composer create-project laravel\/laravel proyecto\ncd proyecto<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Luego instalamos el paquete Laravel UI:<\/p>\n\n\n\n<pre class=\"wp-block-pirumatic-blocks\"><code class=\"language-bash\">composer require laravel\/ui<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Generamos las vistas de autenticaci\u00f3n con Bootstrap:<\/p>\n\n\n\n<pre class=\"wp-block-pirumatic-blocks\"><code class=\"language-bash\">php artisan ui bootstrap --auth<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Finalmente instalamos las dependencias de frontend y compilamos los assets:<\/p>\n\n\n\n<pre class=\"wp-block-pirumatic-blocks\"><code class=\"language-\">npm install &amp;&amp; npm run dev\nphp artisan migrate<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con esto ya tenemos login, registro, recuperaci\u00f3n de contrase\u00f1a y un layout con Bootstrap.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Desactivar el registro de usuarios<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Si no queremos que cualquiera se registre en el sistema, podemos desactivar la ruta de registro. Para ello editamos <code>routes\/web.php<\/code> y reemplazamos la configuraci\u00f3n de rutas de autenticaci\u00f3n por:<\/p>\n\n\n\n<pre class=\"wp-block-pirumatic-blocks\"><code class=\"language-php\">Auth::routes([&#039;register&#039; =&gt; false]);<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">De esta manera el formulario y la acci\u00f3n de registro quedan bloqueados. Si adem\u00e1s no queremos mostrar el enlace de registro en la navegaci\u00f3n, podemos eliminarlo de la vista <code>layouts\/app.blade.php<\/code>.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Mostrar todos los usuarios en el Home<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">En lugar de mostrar solo un mensaje de bienvenida, podemos usar la p\u00e1gina de inicio para listar los usuarios registrados. Para esto, editamos el controlador <code>HomeController<\/code>:<\/p>\n\n\n\n<pre class=\"wp-block-pirumatic-blocks\"><code class=\"language-php\">namespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse App\\Models\\User;\n\nclass HomeController extends Controller\n{\n    public function __construct()\n    {\n        $this-&gt;middleware(&#039;auth&#039;);\n    }\n\n    public function index(Request $request)\n    {\n        $search = $request-&gt;input(&#039;search&#039;);\n\n        $users = User::when($search, function ($query, $search) {\n                        return $query-&gt;where(&#039;name&#039;, &#039;like&#039;, &quot;%{$search}%&quot;)\n                                     -&gt;orWhere(&#039;email&#039;, &#039;like&#039;, &quot;%{$search}%&quot;);\n                    })\n                    -&gt;orderBy(&#039;id&#039;, &#039;desc&#039;)\n                    -&gt;paginate(5);\n\n        return view(&#039;home&#039;, compact(&#039;users&#039;, &#039;search&#039;));\n    }\n}<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Con este c\u00f3digo podemos buscar usuarios por nombre o correo electr\u00f3nico, y mostramos los resultados con paginaci\u00f3n.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Vista con tabla y barra de b\u00fasqueda<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">En <code>resources\/views\/home.blade.php<\/code> reemplazamos el contenido con lo siguiente:<\/p>\n\n\n\n<pre class=\"wp-block-pirumatic-blocks\"><code class=\"language-php\">@extends(&#039;layouts.app&#039;)\n\n@section(&#039;content&#039;)\n&lt;div class=&quot;container&quot;&gt;\n    &lt;h3 class=&quot;mb-4&quot;&gt;Lista de Usuarios&lt;\/h3&gt;\n\n    &lt;form method=&quot;GET&quot; action=&quot;{{ route(&#039;home&#039;) }}&quot; class=&quot;mb-3 d-flex&quot;&gt;\n        &lt;input type=&quot;text&quot; name=&quot;search&quot; class=&quot;form-control me-2&quot;\n               placeholder=&quot;Buscar por nombre o email&quot; value=&quot;{{ $search ?? &#039;&#039; }}&quot;&gt;\n        &lt;button class=&quot;btn btn-primary&quot; type=&quot;submit&quot;&gt;Buscar&lt;\/button&gt;\n    &lt;\/form&gt;\n\n    &lt;div class=&quot;card&quot;&gt;\n        &lt;div class=&quot;card-body&quot;&gt;\n            &lt;table class=&quot;table table-bordered table-striped&quot;&gt;\n                &lt;thead class=&quot;table-dark&quot;&gt;\n                    &lt;tr&gt;\n                        &lt;th&gt;ID&lt;\/th&gt;\n                        &lt;th&gt;Nombre&lt;\/th&gt;\n                        &lt;th&gt;Email&lt;\/th&gt;\n                        &lt;th&gt;Creado&lt;\/th&gt;\n                    &lt;\/tr&gt;\n                &lt;\/thead&gt;\n                &lt;tbody&gt;\n                    @forelse ($users as $user)\n                        &lt;tr&gt;\n                            &lt;td&gt;{{ $user-&gt;id }}&lt;\/td&gt;\n                            &lt;td&gt;{{ $user-&gt;name }}&lt;\/td&gt;\n                            &lt;td&gt;{{ $user-&gt;email }}&lt;\/td&gt;\n                            &lt;td&gt;{{ $user-&gt;created_at-&gt;format(&#039;d\/m\/Y&#039;) }}&lt;\/td&gt;\n                        &lt;\/tr&gt;\n                    @empty\n                        &lt;tr&gt;\n                            &lt;td colspan=&quot;4&quot; class=&quot;text-center&quot;&gt;No se encontraron usuarios&lt;\/td&gt;\n                        &lt;\/tr&gt;\n                    @endforelse\n                &lt;\/tbody&gt;\n            &lt;\/table&gt;\n\n            &lt;div class=&quot;d-flex justify-content-center&quot;&gt;\n                {{ $users-&gt;appends([&#039;search&#039; =&gt; $search])-&gt;links() }}\n            &lt;\/div&gt;\n        &lt;\/div&gt;\n    &lt;\/div&gt;\n&lt;\/div&gt;\n@endsection<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Ahora, al iniciar sesi\u00f3n en el sistema, veremos una tabla con todos los usuarios registrados, con opci\u00f3n de buscarlos y navegar por p\u00e1ginas.<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Conclusi\u00f3n<\/h4>\n\n\n\n<p class=\"wp-block-paragraph\">Laravel UI con Bootstrap sigue siendo una forma r\u00e1pida y pr\u00e1ctica de tener un sistema de autenticaci\u00f3n b\u00e1sico en Laravel. Adem\u00e1s, personalizar la p\u00e1gina de inicio para mostrar y administrar usuarios es un buen primer paso para extender la aplicaci\u00f3n seg\u00fan las necesidades del proyecto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Laravel es uno de los frameworks PHP m\u00e1s utilizados para construir aplicaciones modernas. Una de las tareas m\u00e1s comunes al iniciar un proyecto es implementar un sistema de autenticaci\u00f3n. Aunque hoy en d\u00eda existen paquetes como Breeze o Jetstream, el paquete Laravel UI sigue siendo una opci\u00f3n ligera y directa, sobre todo si queremos integrar [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":621,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5,7,8,10,15,23],"tags":[33,35,37,46,78,79,87,105,109,121,137],"class_list":["post-620","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-autenticacion","category-bootstrap","category-desarrollo-web","category-laravel","category-php","category-tutoriales","tag-autenticacion-en-laravel","tag-barra-de-busqueda","tag-bootstrap","tag-crud-usuarios","tag-laravel-12","tag-laravel-ui","tag-login-laravel","tag-paginacion","tag-php-8","tag-registro-laravel","tag-tabla-usuarios"],"_links":{"self":[{"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=\/wp\/v2\/posts\/620","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=620"}],"version-history":[{"count":0,"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=\/wp\/v2\/posts\/620\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=\/wp\/v2\/media\/621"}],"wp:attachment":[{"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=620"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=620"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.pirulug.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=620"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}