7. Cerrar Sesión
Cerrar Sesión en Laravel
Creando la ruta de logout
Primero, necesitamos agregar una ruta para el cierre de sesión en routes/web.php:
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])
->name('logout');Implementando el método destroy en el controlador
En app/Http/Controllers/Auth/AuthenticatedSessionController.php:
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Auth;
public function destroy(Request $request)
{
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/');
}Creando el formulario de logout en la vista
Agrega este formulario en tu vista (generalmente en el layout principal o navbar):
<form method="POST" action="{{ route('logout') }}">
@csrf
<button type="submit" class="btn btn-link">
<i class="fas fa-sign-out-alt"></i> Cerrar Sesión
</button>
</form>Versión alternativa con enlace (usando JavaScript)
Si prefieres un enlace en lugar de un botón:
<a href="{{ route('logout') }}"
onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
Cerrar Sesión
</a>
<form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
@csrf
</form>Personalización adicional
Puedes personalizar la redirección después del logout modificando el return en el método destroy:
return redirect()->route('login')->with('status', 'Has cerrado sesión correctamente');Este código sigue las mejores prácticas de Laravel para el cierre de sesión seguro, incluyendo la invalidación de sesión y regeneración del token CSRF.
implementar el cierre de sesión en Laravel
Paso 1: Configurar la ruta de logout
Primero debemos crear una ruta para el cierre de sesión, similar a la que Laravel incluye por defecto para el login. En tu archivo routes/web.php:
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])
->name('logout');Paso 2: Implementar el botón de cierre de sesión
En la cabecera de tu layout (generalmente resources/views/layouts/app.blade.php), agrega:
<!-- Opción 1: Formulario directo -->
<form method="POST" action="{{ route('logout') }}" id="logout-form">
@csrf
<button type="submit" class="btn btn-link">
<i class="fas fa-sign-out-alt"></i> Salir
</button>
</form>
<!-- Opción 2: Enlace con JavaScript -->
<a href="#" onclick="event.preventDefault(); document.getElementById('logout-form').submit();">
<i class="fas fa-sign-out-alt"></i> Salir
</a>Paso 3: Funcionamiento del sistema
Al hacer clic en "Salir", se enviará una petición POST a la ruta
/logoutLaravel invalidará la sesión actual
Serás redirigido a la página de login
Si intentas volver atrás, el sistema te pedirá que inicies sesión nuevamente
Validaciones adicionales
Para mejorar la experiencia de usuario, puedes agregar mensajes de error:
@if($errors->has('email'))
<div class="alert alert-danger mt-3">
Error con el email o contraseña
</div>
@endifPersonalización
Puedes modificar el redireccionamiento después del logout editando el método destroy en AuthenticatedSessionController.php:
public function destroy(Request $request)
{
Auth::guard('web')->logout();
$request->session()->invalidate();
$request->session()->regenerateToken();
return redirect('/login')->with('status', 'Sesión cerrada correctamente');
}Con estos pasos tendrás un sistema de cierre de sesión completo y seguro en tu aplicación Laravel
Comentarios
Publicar un comentario