Maison >interface Web >js tutoriel >Gérer la déconnexion JWT avec les listes noires et Redis : un guide convivial pour les débutants
Lors de la création d'API sécurisées avec JWT (JSON Web Tokens), la gestion de la déconnexion des utilisateurs peut être délicate. Étant donné que JWT est apatride, il n’existe aucun moyen prêt à l’emploi d’invalider les jetons après la déconnexion. C’est là que les listes noires et les outils comme Redis entrent en jeu. Si vous êtes nouveau dans ces concepts, ne vous inquiétez pas ! Ce guide vous expliquera tout étape par étape et vous aidera à mettre en œuvre une solution pratique.
Systèmes apatrides
JWT
Une liste noire est une liste de jetons qui ont été invalidés. Lorsqu'un utilisateur se déconnecte, son jeton est ajouté à cette liste. Chaque fois qu'une requête est effectuée, le serveur vérifie si le token est dans la liste noire. Si tel est le cas, la demande est rejetée.
Étapes pour mettre en œuvre une liste noire :
Redis est une base de données clé-valeur en mémoire hautes performances. C'est parfait pour des cas d'utilisation comme la mise sur liste noire des JWT car :
Si vous débutez avec ces concepts, commencez par une solution simple en mémoire :
const blacklist = new Set(); // Add token to blacklist authController.logout = (req, res) => { const token = req.headers.authorization.split(" ")[1]; blacklist.add(token); res.status(200).json({ message: "Logged out successfully" }); }; // Middleware to check token validity middleware.verifyToken = (req, res, next) => { const token = req.headers.authorization.split(" ")[1]; if (blacklist.has(token)) { return res.status(401).json({ message: "Invalid token" }); } next(); };
Cette approche fonctionne pour les projets à petite échelle mais présente des limites. Si votre application évolue, vous aurez besoin d'une solution plus robuste comme Redis.
Utilisez la bibliothèque ioredis pour interagir avec Redis dans votre application Node.js :
const blacklist = new Set(); // Add token to blacklist authController.logout = (req, res) => { const token = req.headers.authorization.split(" ")[1]; blacklist.add(token); res.status(200).json({ message: "Logged out successfully" }); }; // Middleware to check token validity middleware.verifyToken = (req, res, next) => { const token = req.headers.authorization.split(" ")[1]; if (blacklist.has(token)) { return res.status(401).json({ message: "Invalid token" }); } next(); };
npm install ioredis
Feature | In-Memory (Set) | Redis |
---|---|---|
Scalability | Limited to a single server | Distributed across servers |
Speed | Very fast | Equally fast |
Persistence | Lost on server restart | Data persists across restarts |
Cleanup | Manual | Automatic with TTL |
Commencer simplement avec une solution en mémoire et passer progressivement à Redis vous permet de ne pas vous laisser submerger. Bon codage !
Faites-moi savoir dans les commentaires si vous avez des questions ou si vous avez besoin d'aide pour la configuration de Redis. ?
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!