← Retour au cours

Authentification JWT + bcrypt

⏱ 10 min · 🎬 Lecon · 🏆 18 XP
🎬
Vidéo en production
Notre équipe pédagogique tourne actuellement cette leçon avec un·e formateur·rice expert·e. Le contenu textuel ci-dessous est complet et utilisable dès maintenant.

JWT (JSON Web Token)

Standard pour authentification stateless. 3 parties séparées par points : Header.Payload.Signature.

import jwt from 'jsonwebtoken';
import bcrypt from 'bcrypt';

// Login endpoint
app.post('/login', async (req, res) => {
  const { email, password } = req.body;
  const user = await prisma.user.findUnique({ where: { email } });
  if (!user) return res.status(401).json({ error: 'Invalid' });

  const valid = await bcrypt.compare(password, user.password_hash);
  if (!valid) return res.status(401).json({ error: 'Invalid' });

  const token = jwt.sign(
    { userId: user.id, email: user.email },
    process.env.JWT_SECRET,
    { expiresIn: '7d' }
  );
  res.json({ token });
});

// Middleware auth
function authMiddleware(req, res, next) {
  const token = req.headers.authorization?.split(' ')[1];
  if (!token) return res.status(401).end();
  try {
    req.user = jwt.verify(token, process.env.JWT_SECRET);
    next();
  } catch (err) {
    res.status(401).end();
  }
}

⚠️ NE JAMAIS stocker le password en clair. Toujours bcrypt avec rounds >= 10. Et JWT_SECRET au minimum 256-bit aléatoire.