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:

php
Route::post('/logout', [AuthenticatedSessionController::class, 'destroy'])
    ->name('logout');

Implementando el método destroy en el controlador

En app/Http/Controllers/Auth/AuthenticatedSessionController.php:

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):

html
<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:

html
<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:

php
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:

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:

html
<!-- 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

  1. Al hacer clic en "Salir", se enviará una petición POST a la ruta /logout

  2. Laravel invalidará la sesión actual

  3. Serás redirigido a la página de login

  4. 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:

html
@if($errors->has('email'))
<div class="alert alert-danger mt-3">
    Error con el email o contraseña
</div>
@endif

Personalización

Puedes modificar el redireccionamiento después del logout editando el método destroy en AuthenticatedSessionController.php:

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

Entradas más populares de este blog

8-Creación de una API RESTful con Laravel

02 -Rutas en Laravel

3-Rutas