Chapitre 37 : Mini-projet – Authentification

Créez une application complète d'authentification avec inscription, connexion et déconnexion en PHP

1. Objectif du projet

Créer un système d'authentification sécurisé avec :

  • Inscription avec mot de passe haché
  • Connexion avec vérification
  • Déconnexion via session
  • Zone privée accessible uniquement aux membres connectés

2. Structure de la base de données

CREATE TABLE utilisateurs (
  id INT AUTO_INCREMENT PRIMARY KEY,
  email VARCHAR(150) NOT NULL UNIQUE,
  mot_de_passe VARCHAR(255) NOT NULL,
  date_creation DATETIME DEFAULT CURRENT_TIMESTAMP
);

3. Formulaire d'inscription

<form action="inscription.php" method="POST">
  <input type="email" name="email" placeholder="Votre email" required>
  <input type="password" name="mot_de_passe" placeholder="Mot de passe" required>
  <button type="submit">S'inscrire</button>
</form>

4. Traitement de l'inscription (inscription.php)

if ($_SERVER["REQUEST_METHOD"] === "POST") {
  $email = filter_var($_POST['email'], FILTER_VALIDATE_EMAIL);
  $mdp = $_POST['mot_de_passe'];

  if ($email && strlen($mdp) >= 6) {
    $hash = password_hash($mdp, PASSWORD_DEFAULT);
    $pdo = new PDO("mysql:host=localhost;dbname=auth", "root", "");
    $stmt = $pdo->prepare("INSERT INTO utilisateurs (email, mot_de_passe) VALUES (?, ?)");
    $stmt->execute([$email, $hash]);
    echo "Inscription réussie.";
  } else {
    echo "Email ou mot de passe invalide.";
  }
}

5. Connexion des utilisateurs

// connexion.php
session_start();
$pdo = new PDO("mysql:host=localhost;dbname=auth", "root", "");

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
  $stmt = $pdo->prepare("SELECT * FROM utilisateurs WHERE email = ?");
  $stmt->execute([$_POST['email']]);
  $user = $stmt->fetch();

  if ($user && password_verify($_POST['mot_de_passe'], $user['mot_de_passe'])) {
    $_SESSION['user_id'] = $user['id'];
    header('Location: espace_prive.php');
  } else {
    echo "Identifiants incorrects.";
  }
}

6. Accès restreint

// espace_prive.php
session_start();
if (!isset($_SESSION['user_id'])) {
  header('Location: connexion.php');
  exit();
}
echo "Bienvenue dans l'espace membre !";

7. Déconnexion

// deconnexion.php
session_start();
session_unset();
session_destroy();
header('Location: connexion.php');

8. Exercice pratique : Implémentez le système complet

🎯 Objectif : Créer un mini-site complet avec gestion des utilisateurs.

Consignes :

  • Créer la table utilisateurs
  • Créer les pages : inscription.php, connexion.php, espace_prive.php, deconnexion.php
  • Utiliser les sessions PHP pour la connexion
  • Sécuriser les mots de passe avec password_hash()

Bonus :

  • Ajouter un champ "nom"
  • Empêcher les doublons d'inscription
  • Afficher une erreur stylisée si l'authentification échoue

9. Résumé

  • ✅ Vous avez appris à sécuriser une inscription
  • ✅ Vous avez mis en place une vérification de mot de passe
  • ✅ Vous gérez l'authentification avec des sessions

Félicitations ! Vous êtes maintenant capable de créer un véritable espace membre sécurisé.