Apabila membina API selamat dengan JWT (JSON Web Token), pengendalian log keluar pengguna boleh menjadi rumit. Memandangkan JWT adalah tanpa kerakyatan, tiada cara luar biasa untuk membatalkan token selepas log keluar. Di situlah senarai hitam dan alatan seperti Redis dimainkan. Jika anda baru menggunakan konsep ini, jangan risau! Panduan ini akan menerangkan segala-galanya langkah demi langkah dan membantu anda melaksanakan penyelesaian praktikal.
Sistem Tanpa Status
JWT
Senarai hitam ialah senarai token yang telah tidak sah. Apabila pengguna log keluar, token mereka ditambahkan pada senarai ini. Setiap kali permintaan dibuat, pelayan menyemak sama ada token berada dalam senarai hitam. Jika ya, permintaan itu ditolak.
Langkah untuk Melaksanakan Senarai Hitam:
Redis ialah pangkalan data nilai kunci dalam memori berprestasi tinggi. Ia sesuai untuk kes penggunaan seperti menyenarai hitamkan JWT kerana:
Jika anda baru mengenali konsep ini, mulakan dengan penyelesaian dalam ingatan yang mudah:
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(); };
Pendekatan ini berfungsi untuk projek berskala kecil tetapi mempunyai had. Jika apl anda berskala, anda memerlukan penyelesaian yang lebih mantap seperti Redis.
Gunakan perpustakaan ioredis untuk berinteraksi dengan Redis dalam apl Node.js anda:
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 |
Bermula dengan mudah dengan penyelesaian dalam memori dan beralih secara beransur-ansur kepada Redis memastikan anda tidak terharu. Selamat mengekod!
Beri tahu saya dalam ulasan jika anda mempunyai sebarang soalan atau memerlukan bantuan dengan persediaan Redis. ?
Atas ialah kandungan terperinci Mengurus Log Keluar JWT dengan Senarai Hitam dan Redis: Panduan Mesra Permulaan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!