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');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(); 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 onull.
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:
- Comprobar si hay usuario autenticado
- Recuperar el usuario actual
- Validar credenciales
- 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.