Chapitre 9Projet SunuLearn

Authentification — inscription et connexion

Laravel Breeze, middleware auth et protection des routes

Concepts Théoriques

SunuLearn a besoin que les utilisateurs se connectent pour s'inscrire aux formations et suivre leur progression. Laravel fournit tout le système d'authentification — il suffit de l'activer.

Laravel Breeze

Breeze est le starter kit d'authentification léger de Laravel. Il installe : inscription, connexion, déconnexion, mot de passe oublié, vérification email, et page profil. Le tout avec des vues Blade + Tailwind CSS que vous pouvez personnaliser.

En Laravel 12, Breeze n'est plus dans les options du starter kit par défaut, mais il fonctionne parfaitement :

composer require laravel/breeze --dev
php artisan breeze:install blade
npm install && npm run build
php artisan migrate

Choisissez Blade with Alpine quand Breeze vous demande le stack. Alpine.js est un micro-framework JS déjà inclus — vous ne le toucherez pas directement.

Après l'installation, visitez http://localhost:8000 — les liens "Login" et "Register" apparaissent.

Ce que Breeze a installé

  • Routes dans routes/auth.php : login, register, logout, password.reset, password.confirm, verification.verify
  • Controllers dans app/Http/Controllers/Auth/ : LoginController, RegisterController, etc.
  • Vues dans resources/views/auth/ : login.blade.php, register.blade.php, etc.
  • Middleware auth : protège les routes qui nécessitent une connexion

Protéger des routes

// routes/web.php
Route::middleware('auth')->group(function () {
    Route::get('/dashboard', [DashboardController::class, 'index'])->name('dashboard');
    Route::get('/mes-formations', [EnrollmentController::class, 'index'])->name('enrollments.index');
});

Les visiteurs non connectés sont redirigés vers /login.

@auth et @guest dans Blade

@auth
    <p>Connecté en tant que {{ auth()->user()->name }}</p>
    <a href="{{ route('dashboard') }}">Mon espace</a>
@endauth

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

L'utilisateur connecté

// Dans un contrôleur
$user = auth()->user();          // L'utilisateur connecté
$user->name;                     // Son nom
$user->email;                    // Son email

// Vérifier si connecté
if (auth()->check()) { ... }