Trouve la première occurrence dans une chaîne
Apprenez à créer un système d’authentification avec ExpressJS dans ce tutoriel pas à pas pour débutants . Exemples simples et exécutables inclus
Dans ce tutoriel, nous allons apprendre à créer un système d’authentification simple avec ExpressJS. Ce guide est fait pour les débutants : nous irons doucement, étape par étape, avec des explications très claires et un exemple que vous pourrez tester. Vous apprendrez à gérer une inscription et une connexion avec un mot de passe sécurisé
L’authentification, c’est vérifier qui est l'utilisateur avant de lui donner accès à certaines parties d’un site. Par exemple, sur un site, vous entrez un email et un mot de passe pour prouver que c’est bien vous. Avec ExpressJS, nous allons utiliser des sessions pour suivre les utilisateurs connectés et bcrypt
pour sécuriser les mots de passe. Notre exemple aura une page d’inscription et une page de connexion.
Avant de coder, préparons tout ce qu’il faut. Si vous avez suivi les tutoriels précédents, vous avez déjà Node.js et ExpressJS. Si non voici les étapes à suivre :
node -v
. Si une version apparaît (ex. : v16.13.0), c’est bon. Sinon, téléchargez Node.js sur le site officiel : nodejs.org.cd chemin/vers/authentification-express
, puis tapez la commande : npm init -y
. Cela crée un fichier package.json
.npm install express express-session bcrypt
. Voici ce que chaque outil fait :
Commençons par permettre aux utilisateurs de s’inscrire avec un email et un mot de passe. Pour simplifier, nous stockerons les données dans une liste en mémoire (pas une vraie base de données pour ce tutoriel).
Créez un fichier nommé index.js
dans votre dossier "authentification-express" et ajoutez ce code. Il gère l’inscription.
var express = require('express'); var session = require('express-session'); var bcrypt = require('bcrypt'); var app = express(); // Liste temporaire pour stocker les utilisateurs var utilisateurs = []; // Configurer les sessions et les formulaires app.use(session({ secret: 'monsecret', resave: false, saveUninitialized: false })); app.use(express.urlencoded({ extended: false })); // Route pour afficher le formulaire d’inscription app.get('/inscription', function(req, res) { res.send(` <html> <body> <h1>Inscription</h1> <form method="POST" action="/inscription"> <label>Email : </label> <input type="email" name="email"><br> <label>Mot de passe : </label> <input type="password" name="motdepasse"><br> <button type="submit">S’inscrire</button> </form> <p><a href="/connexion" title="Aller à la page de connexion">Déjà inscrit ? Connectez-vous</a></p> </body> </html> `); }); // Route pour traiter l’inscription app.post('/inscription', async function(req, res) { var email = req.body.email; var motdepasse = req.body.motdepasse; // Vérifier si l’email existe déjà var existe = utilisateurs.find(user => user.email === email); if (existe) { res.send("<html><body><h1>Cet email est déjà utilisé ! <a href='/inscription'>Réessayer</a></h1></body></html>"); } else { // Hacher le mot de passe var motdepasseHache = await bcrypt.hash(motdepasse, 10); utilisateurs.push({ email: email, motdepasse: motdepasseHache }); res.send("<html><body><h1>Inscription réussie ! <a href='/connexion'>Se connecter</a></h1></body></html>"); } }); app.listen(3000, function() { console.log("Serveur démarré sur http://localhost:3000/inscription"); });
Voici chaque ligne du cose expliquée très simplement :
express-session
pour suivre les utilisateurs (utilisé plus tard).bcrypt
pour sécuriser les mots de passe.async
est nécessaire pour utiliser await
avec bcrypt
.10
est le niveau de sécurité (plus c’est haut, plus c’est lent mais sûr).Pour exécuter : Sauvegardez index.js
, tapez node index.js
, puis ouvrez <a href="http://localhost:3000/inscription" title="Tester l’inscription">http://localhost:3000/inscription</a>. Entrez un email (ex. : "test@example.com") et un mot de passe (ex. : "1234"), cliquez sur "S’inscrire". Vous verrez "Inscription réussie !".
Maintenant, ajoutons une page de connexion pour vérifier les utilisateurs inscrits et utiliser une session pour les suivre.
Mettez à jour index.js
avec ce code. Il ajoute la connexion et une page protégée.
var express = require('express'); var session = require('express-session'); var bcrypt = require('bcrypt'); var app = express(); // Liste temporaire pour stocker les utilisateurs var utilisateurs = []; // Configurer les sessions et les formulaires app.use(session({ secret: 'monsecret', resave: false, saveUninitialized: false })); app.use(express.urlencoded({ extended: false })); // Route pour l’inscription app.get('/inscription', function(req, res) { res.send(` <html> <body> <h1>Inscription</h1> <form method="POST" action="/inscription"> <label>Email : </label> <input type="email" name="email"><br> <label>Mot de passe : </label> <input type="password" name="motdepasse"><br> <button type="submit">S’inscrire</button> </form> <p><a href="/connexion" title="Aller à la page de connexion">Déjà inscrit ? Connectez-vous</a></p> </body> </html> `); }); app.post('/inscription', async function(req, res) { var email = req.body.email; var motdepasse = req.body.motdepasse; var existe = utilisateurs.find(user => user.email === email); if (existe) { res.send("<html><body><h1>Cet email est déjà utilisé ! <a href='/inscription'>Réessayer</a></h1></body></html>"); } else { var motdepasseHache = await bcrypt.hash(motdepasse, 10); utilisateurs.push({ email: email, motdepasse: motdepasseHache }); res.send("<html><body><h1>Inscription réussie ! <a href='/connexion'>Se connecter</a></h1></body></html>"); } }); // Route pour la connexion app.get('/connexion', function(req, res) { res.send(` <html> <body> <h1>Connexion</h1> <form method="POST" action="/connexion"> <label>Email : </label> <input type="email" name="email"><br> <label>Mot de passe : </label> <input type="password" name="motdepasse"><br> <button type="submit">Se connecter</button> </form> <p><a href="/inscription" title="Aller à la page d’inscription">Pas de compte ? Inscrivez-vous</a></p> </body> </html> `); }); app.post('/connexion', async function(req, res) { var email = req.body.email; var motdepasse = req.body.motdepasse; var utilisateur = utilisateurs.find(user => user.email === email); if (utilisateur && await bcrypt.compare(motdepasse, utilisateur.motdepasse)) { req.session.utilisateur = email; // Stocker l’email dans la session res.send("<html><body><h1>Connexion réussie ! <a href='/prive'>Page privée</a></h1></body></html>"); } else { res.send("<html><body><h1>Email ou mot de passe incorrect ! <a href='/connexion'>Réessayer</a></h1></body></html>"); } }); // Route protégée app.get('/prive', function(req, res) { if (req.session.utilisateur) { res.send(` <html> <body> <h1>Bienvenue, ${req.session.utilisateur} !</h1> <p>Ceci est une page privée. <a href="/deconnexion">Se déconnecter</a></p> </body> </html> `); } else { res.send("<html><body><h1>Vous devez vous connecter ! <a href='/connexion'>Connexion</a></h1></body></html>"); } }); // Route pour se déconnecter app.get('/deconnexion', function(req, res) { req.session.destroy(); res.send("<html><body><h1>Déconnecté ! <a href='/connexion'>Se reconnecter</a></h1></body></html>"); }); app.listen(3000, function() { console.log("Serveur démarré sur http://localhost:3000/inscription"); });
Voici chaque nouvelle partie expliquée pour les débutants :
bcrypt.compare
vérifie si ça correspond.Pour exécuter : Sauvegardez index.js
, tapez node index.js
, allez à http://localhost:3000/inscription. Inscrivez-vous (ex. : "test@example.com", "1234"), puis connectez-vous à http://localhost:3000/connexion. Vous accéderez à la page privée !
Félicitations ! Vous savez maintenant créer un système d’authentification avec ExpressJS. Vous avez appris à inscrire des utilisateurs, sécuriser leurs mots de passe, et gérer leur connexion avec des sessions. Pour aller plus loin, explorez notre prochain tutoriel sur Créer une API RESTful avec ExpressJS ou consultez la documentation ExpressJS.