JSON Web Token (JWT) ialah cara padat dan serba lengkap untuk menghantar maklumat dengan selamat antara pihak sebagai objek JSON. JWT digunakan secara meluas untuk mengesahkan pengguna dalam aplikasi web. Dalam tutorial ini, kami akan membina bahagian belakang Node.js dan Express dengan pengesahan JWT.
JWT (JSON Web Token) ialah standard terbuka untuk menghantar maklumat dengan selamat antara pihak sebagai objek JSON. Setiap token terdiri daripada tiga bahagian:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huZG9lIn0.H6BBiB1y5eXKXvW9bbjT2Rg8Jp4oE4Y5Kxf_sDF7Kzg
Buat direktori projek baharu:
mkdir jwt-auth-app cd jwt-auth-app
Mulakan projek Node.js baharu:
npm init -y
Pasang kebergantungan yang diperlukan:
npm install express jsonwebtoken bcryptjs dotenv express-validator
Buat persediaan pelayan asas dalam server.js:
// server.js require('dotenv').config(); const express = require('express'); const app = express(); app.use(express.json()); // Import Routes const authRoutes = require('./routes/auth'); app.use('/api/auth', authRoutes); const PORT = process.env.PORT || 5000; app.listen(PORT, () => console.log(`Server running on port ${PORT}`));
Buat fail .env untuk menyimpan pembolehubah persekitaran:
PORT=5000 JWT_SECRET=your_jwt_secret_key
// routes/auth.js const express = require('express'); const { body, validationResult } = require('express-validator'); const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); const router = express.Router(); const users = []; // In-memory user storage // Signup Route router.post( '/signup', [ body('username').isLength({ min: 3 }), body('password').isLength({ min: 5 }) ], async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() }); const { username, password } = req.body; const hashedPassword = await bcrypt.hash(password, 10); users.push({ username, password: hashedPassword }); res.status(201).json({ message: 'User registered successfully' }); } ); // Login Route router.post( '/login', [ body('username').notEmpty(), body('password').notEmpty() ], async (req, res) => { const errors = validationResult(req); if (!errors.isEmpty()) return res.status(400).json({ errors: errors.array() }); const { username, password } = req.body; const user = users.find(u => u.username === username); if (!user) return res.status(400).json({ message: 'Invalid credentials' }); const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) return res.status(400).json({ message: 'Invalid credentials' }); const token = jwt.sign({ username }, process.env.JWT_SECRET, { expiresIn: '1h' }); res.json({ token }); } ); module.exports = router;
const token = jwt.sign({ username }, process.env.JWT_SECRET, { expiresIn: '1h' });
Untuk melindungi laluan, cipta perisian tengah untuk mengesahkan token.
// middleware/auth.js const jwt = require('jsonwebtoken'); module.exports = function (req, res, next) { const token = req.header('Authorization')?.split(' ')[1]; if (!token) return res.status(401).json({ message: 'Access denied' }); try { const decoded = jwt.verify(token, process.env.JWT_SECRET); req.user = decoded; next(); } catch (ex) { res.status(400).json({ message: 'Invalid token' }); } };
Buat laluan dilindungi yang memerlukan token yang sah:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huZG9lIn0.H6BBiB1y5eXKXvW9bbjT2Rg8Jp4oE4Y5Kxf_sDF7Kzg
Dalam tutorial ini, kami telah membincangkan asas menyediakan pengesahan JWT dalam bahagian belakang Node.js dan Express. Panduan ini menunjukkan:
JWT ialah cara yang berkuasa untuk mengendalikan pengesahan, menjadikan aplikasi web anda selamat dan berskala.
Atas ialah kandungan terperinci Mencipta dan Menjaga Pengesahan JWT dalam Apl Web. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!