auth: Vistas y Controladores

Autenticación en Laravel (Breeze)

Control de acceso con directivas Blade, middleware y obtención del usuario autenticado.


Directivas Blade: @auth y @guest

Laravel proporciona directivas específicas para comprobar si el usuario está autenticado.

@auth

Renderiza el contenido solo si el usuario está autenticado.

@auth
<p>Bienvenido {{ auth()->user()->name }}</p>
@endauth

Equivalente interno:

if (auth()->check()) {
// usuario autenticado
}

@guest

Renderiza el contenido solo si NO hay usuario autenticado.

@guest
<a href="{{ route('login') }}">Login</a>
<a href="{{ route('register') }}">Register</a>
@endguest

Equivalente interno:

if (!auth()->check()) {
// usuario no autenticado
}

Middleware auth en rutas

El middleware protege rutas para que solo accedan usuarios autenticados.

En routes/web.php

Route::get('/dashboard', function () {
return view('dashboard');
})->middleware('auth');
Agrupando rutas
Route::middleware('auth')->group(function () {
Route::get('/profile', [ProfileController::class, 'edit']);
Route::get('/settings', [SettingsController::class, 'index']);
});

Si el usuario no está autenticado:

  • Laravel redirige automáticamente a /login.

Obtener el usuario autenticado en un Controller

$user = auth()->user();
Alternativa con Request
    public function index(Request $request)
    {
          $user = $request->user();
    }

¿Qué ocurre si no hay usuario autenticado?

Si la ruta NO está protegida con middleware:

$user = auth()->user(); // devuelve null si no está autenticado

Por eso es recomendable:

    if (auth()->check()) {
       $user = auth()->user();
    }

Resumen conceptual

  • @auth → Mostrar contenido solo si hay usuario autenticado.
  • @guest → Mostrar contenido solo si NO hay usuario autenticado.
  • middleware('auth') → Protege rutas o controladores.
  • auth()->user() → Devuelve el usuario autenticado o null.

Laravel centraliza la autenticación mediante:

  • Guards
  • Middleware
  • Facade Auth
  • Helper auth()

Esto permite mantener el código limpio y coherente en toda la aplicación.

¿Qué es un Guard en Laravel? (Explicación básica)

Un Guard es el mecanismo que Laravel usa para saber:

¿Quién está autenticado y cómo lo he autenticado?

Es decir, el guard decide:

  • DÓNDE se guarda la información del login
  • CÓMO se comprueba si un usuario está autenticado

Comparaitiva para mejor comprensión

Imagina que Laravel es un edificio con varias puertas.

Cada puerta tiene un sistema diferente para comprobar la identidad:

  • 🔑 Una puerta usa sesiones (login clásico con formulario)
  • 🔐 Otra puerta usa tokens API
  • 🪪 Otra podría usar JWT
  • 🧩 Otra podría usar autenticación externa

Cada sistema de acceso es un Guard.


El Guard por defecto

En aplicaciones web normales (con Breeze), Laravel usa el guard: Web Este guard:

  • Usa sesiones
  • Guarda el usuario autenticado en la sesión
  • Funciona con login tradicional (email + password)

Está definido en:

config/auth.php

¿Por qué existen varios Guards?

Porque una misma aplicación puede tener:

  • 👤 Usuarios normales (web)
  • 🤖 API externa con tokens
  • 👨‍🏫 Panel admin separado
  • 📱 App móvil con autenticación diferente

Cada tipo puede usar un guard distinto.

Ejemplo típico:

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],

    'api' => [
        'driver' => 'token',
        'provider' => 'users',
    ],
]

Acciones de un guard

Un guard se encarga de:

  1. Comprobar si hay usuario autenticado
  2. Recuperar el usuario actual
  3. Validar credenciales
  4. Gestionar login / logout

Guard Vs Provider

  • Guard → Cómo se autentica
  • Provider → De dónde salen los usuarios (tabla users, otra tabla, etc.)

Resumen

🔐 Guard = Sistema de autenticación
👤 Provider = Fuente de usuarios
🧾 Middleware auth = Filtro que obliga a estar autenticado


En nuestros proyectos usaremos
  • Guard: web
  • Driver: session
  • Provider: users

Y funcionará automáticamente.

No tenéis que tocar nada hasta que trabajéis con APIs o múltiples tipos de autenticación.