Jetstream en Laravel: Guía Completa

 ¿Qué es Jetstream?

Jetstream es un kit de inicio de aplicaciones para Laravel que proporciona una base sólida y moderna para nuevos proyectos. Fue introducido en Laravel 8 como reemplazo de Laravel UI y se ha convertido en la solución oficial para scaffolding de aplicaciones.

Características principales

1. Sistemas de Autenticación

Jetstream ofrece dos stacks diferentes:

  • Livewire (con Blade)

  • Inertia.js (con Vue.js o React)

Ambos proporcionan:

  • Login/Registro con verificación de email

  • Verificación en dos factores (2FA)

  • Gestión de perfil (foto, información personal)

  • Gestión de sesiones (ver dispositivos activos)

  • API Tokens (para aplicaciones de tipo API)

2. Funcionalidades incluidas

php
// Todo viene preconfigurado:
- Autenticación completa
- Dashboard principal
- Perfil de usuario
- Configuración de cuenta
- Navegación responsiva
- Componentes listos para usar

Relación con Autenticaciones

Cómo Jetstream maneja la autenticación

php
// 1. **Scaffolding completo**
php artisan jetstream:install livewire
// o
php artisan jetstream:install inertia

// 2. **Migraciones incluyen**:
- Tabla users (ampliada)
- Tabla password_reset_tokens
- Tabla sessions (para gestionar sesiones)
- Tabla personal_access_tokens (para API)

// 3. **Funcionalidades de seguridad**:
- Confirmación de contraseña para acciones críticas
- Verificación de email
- Two-Factor Authentication (2FA)
- Gestión de sesiones del navegador

Tutorial Básico de Instalación

Paso 1: Instalar Laravel

bash
composer create-project laravel/laravel mi-proyecto
cd mi-proyecto

Paso 2: Instalar Jetstream

bash
composer require laravel/jetstream

# Para Livewire:
php artisan jetstream:install livewire

# Para Inertia (con Vue):
php artisan jetstream:install inertia --teams

Paso 3: Configurar base de datos

bash
# Crear base de datos
# Configurar .env con credenciales de BD

php artisan migrate
npm install && npm run dev

Paso 4: Ejecutar la aplicación

bash
php artisan serve

Estructura de archivos generada

text
app/
├── Actions/
│   ├── Fortify/          # Lógica de autenticación
│   └── Jetstream/        # Acciones específicas
├── Http/
│   └── Middleware/       # Middlewares de autenticación
├── Models/               # User model ampliado
├── View/Components/      # Componentes de Blade
└── Providers/           # Service Providers

resources/
├── js/                  # Assets JavaScript
├── views/              # Vistas de autenticación
└── markdown/           # Emails Markdown

Personalización de Autenticación

Modificar rutas de autenticación

php
// En app/Providers/JetstreamServiceProvider.php

public function boot()
{
    $this->configurePermissions();
    
    // Personalizar rutas
    Jetstream::createTeamsUsing(CreateTeam::class);
    Jetstream::updateTeamNamesUsing(UpdateTeamName::class);
}

Agregar campos al registro

php
// En app/Actions/Fortify/CreateNewUser.php

public function create(array $input)
{
    Validator::make($input, [
        'name' => ['required', 'string', 'max:255'],
        'email' => ['required', 'string', 'email', 'max:255', 'unique:users'],
        'password' => $this->passwordRules(),
        'phone' => ['required', 'string', 'max:20'], // Campo adicional
    ])->validate();

    return User::create([
        'name' => $input['name'],
        'email' => $input['email'],
        'password' => Hash::make($input['password']),
        'phone' => $input['phone'], // Guardar campo adicional
    ]);
}

Modificar vistas

bash
# Publicar vistas para personalizarlas
php artisan vendor:publish --tag=jetstream-views

Características de Seguridad

1. Two-Factor Authentication (2FA)

php
// Habilitar en config/fortify.php
'features' => [
    Features::twoFactorAuthentication([
        'confirm' => true,
        'confirmPassword' => true,
    ]),
],

2. Confirmación de contraseña

php
// Proteger rutas sensibles
Route::middleware(['auth', 'password.confirm'])->group(function () {
    Route::get('/configuracion', function () {
        // Solo accesible después de confirmar contraseña
    });
});

3. Gestión de sesiones

blade
{{-- En vista de perfil --}}
<x-jet-action-section>
    <x-slot name="title">
        {{ __('Sesiones del navegador') }}
    </x-slot>
    
    {{-- Muestra todas las sesiones activas --}}
    <x-jet-action-message on="loggedOut">
        {{ __('Cerrada en todos los dispositivos.') }}
    </x-jet-action-message>
</x-jet-action-section>

API Tokens con Sanctum

php
// Jetstream integra Laravel Sanctum
// Generar tokens para API:

$token = $user->createToken('token-name', ['server:update']);

// Usar en solicitudes:
Authorization: Bearer {token}

// Revocar tokens:
$user->tokens()->delete();

Ventajas sobre soluciones anteriores

CaracterísticaLaravel UIJetstream
ScaffoldingBásicoCompleto (UI + lógica)
2FAManualIntegrado
SesionesNoGestión completa
API TokensNoCon Sanctum
TeamsNoOpcional
EstilosBootstrapTailwind CSS

Conclusión

Jetstream es mucho más que un simple sistema de autenticación. Es un kit de inicio completo que incluye:

✅ Autenticación robusta con características avanzadas de seguridad
✅ Interfaz moderna con Tailwind CSS
✅ Dos stacks (Livewire o Inertia) según preferencias
✅ API lista con Sanctum
✅ Gestión de equipos opcional
✅ Base sólida para escalar aplicaciones

Es la solución recomendada para nuevos proyectos Laravel que requieren autenticación robusta con características modernas de seguridad y UX.

Recursos adicionales

bash
# Documentación oficial:
https://jetstream.laravel.com

# Repositorio GitHub:
https://github.com/laravel/jetstream

# Video tutorial oficial:
https://laracasts.com/series/laravel-8-from-scratch

Recomendación: Si empiezas un proyecto nuevo en Laravel 9 o superior, Jetstream es la mejor opción para ahorrar tiempo y tener una base segura y profesional desde el primer día.

Esta respuesta es generada por AI, solo como referencia

Comentarios

Entradas más populares de este blog

crear controladores separados para API y Web

Laravel tanto para web como para API al mismo tiempo.

Creación de una API RESTful con Laravel (sin autenticación)