10 Auth, Breeze y Jetstream
Introducción
Hemos comenzado la autenticación mediante API, el concepto de Middleware para proteger nuestras rutas.
Ahora vamos a incluir las vistas, con un formato de trabajo similar, añadiendo extensión para respaldar las vistas de nuestro proyecto.
- La autenticación es un elemento común en cualquier aplicación, por lo que Laravel ya nos ofrecen dos paquetes para gestionarla como son:
- Larave Breeze
- Laravel Jetstream
- Ambos nos permite la autenticación, la primera es mínima con construcciones con Blade, React o Vue.
- Jetstream nos ofrece también la posibilidad de conectar con vistas Blade y con Inertia para, desde allí conectar con
- Livewire
- VUE, React ... (Front)
- Con esto, le aplicaremos reactividad a nuestras vistas, un elemento ya propio de front modernos.
Laravel 11.
Como ya hemos visto, desde paquete instalado de Laravel 11, cuando ejecutabamos mediante el comando +
Laravel new ...
Nos ofrecia una serie de opciones como eran los starter kits y alguna configuración extra que ahora si va a cobrar sentido desde este punto.
Laravel 11
Esta clase va a diferir del tutorial de Youtube, que bien puede servir de base teórica para lo que se va a implementar
Breeze
Vamos a generar ahora un nuevo proyecto con Laravel new en lugar de con composer, para que nos ayude en la configuración inicial.
Es importante tenerlo en cuenta desde el inicio, si se incluye a posteriore hay que tener en cuenta que algunas configuraciones como las rutas puede ser borrada por el scafolding de su ejecución (la creación de carpetas)
Cuidado con la configuración de los starter kit
Como se ha comentado, se podría sobreescribir archivos y carpetas y es por ello que conviene tenerlo en cuenta y configurarlo desde el principio.
Laravel new authbreeze
Generamos el proyecto con la siguiente configuración_:
laravel new authbreeze
- Seleccionamos breeze
- Blade
- Dark mode opcional
- 1 - PhP Unit
- SQLITE
- Yes - running migrations
Y comienza a instalar muchas mas carpetas, paquetes y archivos que como hemos hecho hasta ahora.
Vemos que ahora si instala servicios de Frontal en su escafolding y cómo nos sugiere lo siguiente para compilar.
Next Steps (comandos)
Vemos como al completar el scaffolind nos sugiere la instalción de los siguientes comandos para la parte frontal
➜ cd authbreeze
➜ npm install && npm run build
➜ coma
Estructura del proyecto
Si inicias el proyecto Back y haces un repaso de sus carpetas, verás ya partes incluidas como pueden ser:
- Diversos controladores Auth
- Un archivo de enrutado para auth.php
- Diferentes carpetas de vistas como el dashboard, el auth, componentes y el perfil, et
- Otros archivos que iremos viendo poco a poco
Registro y Dashboard inicial
Si probamos a registrarnos veremos nuestro dashboard con opciones típicas de nuestro perfil como actualizar datos, eliminar cuenta...
Config / auth.php
Es bueno conocer este archivo ya que si bien no lo necesitaremos de primeras, podría darse el caso de necesitar adaptar nuestro proyecto para
- convención de nombres incorrecta..
- otro tipo de autenticación ...
-
elementos por defecto para el control de la autenticación como
-
``` / |-------------------------------------------------------------------------- | Authentication Defaults |-------------------------------------------------------------------------- | | This option defines the default authentication "guard" and password | reset "broker" for your application. You may change these values | as required, but they're a perfect start for most applications. | /
'defaults' => [ 'guard' => env('AUTH_GUARD', 'web'), 'passwords' => env('AUTH_PASSWORD_BROKER', 'users'), ],
`` - Podemos observar que, por defecto, vamos a trabajar con valores de sesión provista por los usuarios. - Podemos necesitar cambiar esta configuración - También podemos necesitar irnos al archivo
config/session` para administrar cómo se guardan los valores de sesion del usuario, en caso que necesitemos guardarlos en redis, a través de cookies, en path, file, en base de datos. Ciclo de vida ..
- session.php:
Lo que quiero transmitir aquí es que vamos a trabajar con múltiples configuraciones precargadas de partida pero que, para un trabajo profesional, se necesitará saber dónde encontrarlas en caso de necesidad para su modificación, especificaciones...
Variables de entorno
Dicho todo lo anterior, cabe destacar aquí que lo más interesante no es modificar los archivos de configuración, si no hacerlo a través de las variables de entorno (.env)
Por ejemplo:
- Si quiero modificar dónde se guarda la sesión para que no sea en file
- Anoto el nombre de la variable, en este caso SESSION_DRIVER (archivo config/session.php)
- Y lo incluyo dentro del .env
- De esta forma dejamos el archivo de configuración intacto ymodificamos sólo las variables de entorno para modificar el comportamiento.
- Igual con la variable SESSION_LIFETIME para el tiempo de vida, por ejemplo
- Esto es igual para API como en monolito/vistas
Similitudes con API
Si investigamos el código, vemos como breeze se apoya igualmente en la clase Auth para hacer la autenticación y para
Parte de código de la ruta web.php
...
Route::get('/dashboard', function () {
return view('dashboard');
})->middleware(['auth', 'verified'])->name('dashboard');
...
Hasta aquí un overview de características general pero muy importante.
Características Breeze
Breeze es el paquete más básico que realiza muchas acciones para autenticación.
Sólo tendremos que preocuparnos de configurar el estilo estético.
Breeze:install vue/react
Hemos hecho la instación con un starter kit, pero podríamos haber instalado Breeze desde cero a través de su comando breeze:install, lo cual carga las vistas en Blade por defecto, algo que puedo modificar si añadimos.
- php artisan breeze:install vue
- php artisan breeze:install react
Pero, como hemos visto, hubiera sido más fácil crearlo conel starter kit de react.
Más adelante lo veremos.
Frontal React/VUE/Blade... SSR
Ahora, hay que tener si usamos INERTIA en cuenta varias cosas
Cuando lo veamos, nos interesará hacer que las vistas de autenticación COINCIDAN con la tecnología del resto de vistas (Blade, VUE, React..)
- En nuestro sistema, tenemos que conocer dónde queremos que se renderize nuestro código.
- Estás tecnologías reactivas van inyectando el contenido dentro del frontal a través de JS.
- Esto hace que el código HTML no sea renderizado previamente dentro del backen
- Se hace en el frontal
- Esto tiene muchas ventajas PERO se pierde el posicionamiento SEO,
- Si este punto es importante, necesitamos especificar el SERVER SIDE RENDERING.
- Perdemos velocidad, ganamos posicionamiento.
- Para especificar esto, hay que marcar la opción --ssr, por ehemplo:
php artisan breeze:install react --ssr
- Igual hay opciones para NEXT con comando api...
Componentes: Formato de etiqueta
Por último, comentar que el formato de inserción de componentes lo hace mediante etiquetas en lugar de la @ como veíamos en vistas Blade:
Ubicación de CSS o JavaScriptBreeze
Hasta ahora, la ubicación del CSS o del Javascript ha ido en la carpeta public (o dentro de algunas vistas).
Ahora Laravel nos ofrece poder ubicarlos dentro de la carpeta resources
npm install
Para poder compilarlos, he de hacer ahora el npm install para instalar las dependencias.
npm run dev
Genera todo listo para funcionar y que las vistas se vean correcta si hubieramos incluido contenido en las carpetas anteriores
Ejecuto el servidor:
php artisan serve
Nuevo modelo y controlador
Vamos a crear una nueva ruta protegida con el middleware auth dentro del grupo .
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit'])->name('profile.edit');
Route::patch('/profile', [ProfileController::class, 'update'])->name('profile.update');
Route::delete('/profile', [ProfileController::class, 'destroy'])->name('profile.destroy');
//la incluimos en el grupo:
Route::get('/example', [ExampleController::class, 'index'])->name('example');
});
Incluimos función index
dentro del controlador ExampleController, como siempre hemos hecho, retornando a la vista example:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class ExampleController extends Controller
{
//
public function index()
{
return view('example');
}
}
Vista example:
Si me gusta la estructura y para seguir lo mismo,
- COPIO y pego la vista dashboard.
- La pego en el archivo example.blade.php
- En el contenido le indico Hello World o lo que yo quiera:
Si ahora me voy al a ruta /example:
Podría añadir o quitar los componentes que necesite.
Tailwind
Blade viene estilado con Tailwind /(Framework CSS) , por si se quiere modificar algo del estilo
Menú de navegación
Podemos modificar el layout de navigation para añadir o quitar elementos del menú:
Duplico el DIV adecuado para poder añadir el nuestro de example (línea 13 aprox)
<!-- Navigation Links -->
<div class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
<x-nav-link :href="route('dashboard')" :active="request()->routeIs('dashboard')">
{{ __('Dashboard') }}
</x-nav-link>
</div>
<div class="hidden space-x-8 sm:-my-px sm:ms-10 sm:flex">
<x-nav-link :href="route('example')" :active="request()->routeIs('example')">
{{ __('Example') }}
</x-nav-link>
</div>