Authentification — Inscription et connexion
password_hash, password_verify, sessions et protection des pages
Concepts Théoriques
L'authentification permet d'identifier les utilisateurs : qui est admin (peut créer/modifier/supprimer des articles), qui est simple visiteur (peut commenter). C'est la brique de sécurité la plus importante.
Hasher les mots de passe — JAMAIS en clair
Stocker un mot de passe en clair dans la base de données est une faute grave. Si la base est piratée, tous les mots de passe sont exposés.
PHP offre deux fonctions :
- password_hash($password, PASSWORD_DEFAULT) — transforme "monMotDePasse" en "$2y$10$abc123..." (un hash irréversible). Même PHP ne peut pas retrouver le mot de passe original.
- password_verify($password, $hash) — compare un mot de passe saisi avec le hash stocké. Retourne true ou false.
PASSWORD_DEFAULT utilise actuellement bcrypt, mais PHP changera automatiquement pour un algorithme plus sûr dans le futur — votre code restera compatible.
Le flux d'inscription
- Afficher le formulaire (nom, email, mot de passe, confirmation)
- Valider (email unique, mot de passe min 8 caractères, confirmation identique)
- Hasher le mot de passe
- Insérer dans la table users
- Connecter automatiquement (stocker l'id en session)
- Rediriger vers le dashboard
Le flux de connexion
- Afficher le formulaire (email, mot de passe)
- Chercher l'utilisateur par email
- Vérifier le mot de passe avec password_verify()
- Si correct : stocker l'id et le rôle en session, rediriger
- Si incorrect : afficher une erreur GÉNÉRIQUE ("Email ou mot de passe incorrect") — ne jamais dire lequel est faux
Protéger les pages admin
Créez une fonction requireAuth() qui vérifie si l'utilisateur est connecté et a le bon rôle. Appelez-la en haut de chaque page protégée. Si l'utilisateur n'est pas connecté, redirigez vers la page de connexion.
C'est l'équivalent du middleware de Laravel — ici on le fait manuellement.
> Sécurité : Le message d'erreur à la connexion doit être générique ("Email ou mot de passe incorrect"). Si vous dites "Cet email n'existe pas", un attaquant peut savoir quels emails sont inscrits.