Heim >Web-Frontend >js-Tutorial >Erstellen und Sichern der JWT-Authentifizierung in einer Web-App
JSON Web Tokens (JWT) sind eine kompakte und eigenständige Möglichkeit, Informationen als JSON-Objekt sicher zwischen Parteien zu übertragen. JWTs werden häufig zur Authentifizierung von Benutzern in Webanwendungen verwendet. In diesem Tutorial erstellen wir ein Node.js- und Express-Backend mit JWT-Authentifizierung.
JWT (JSON Web Token) ist ein offener Standard für die sichere Übertragung von Informationen zwischen Parteien als JSON-Objekt. Jeder Token besteht aus drei Teilen:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huZG9lIn0.H6BBiB1y5eXKXvW9bbjT2Rg8Jp4oE4Y5Kxf_sDF7Kzg
Erstellen Sie ein neues Projektverzeichnis:
mkdir jwt-auth-app cd jwt-auth-app
Initialisieren Sie ein neues Node.js-Projekt:
npm init -y
Installieren Sie die erforderlichen Abhängigkeiten:
npm install express jsonwebtoken bcryptjs dotenv express-validator
Erstellen Sie ein grundlegendes Server-Setup in 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}`));
Erstellen Sie eine .env-Datei zum Speichern von Umgebungsvariablen:
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' });
Um Routen zu schützen, erstellen Sie eine Middleware zur Überprüfung von 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' }); } };
Erstellen Sie eine geschützte Route, die ein gültiges Token erfordert:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VySWQiOiIxMjM0IiwidXNlcm5hbWUiOiJqb2huZG9lIn0.H6BBiB1y5eXKXvW9bbjT2Rg8Jp4oE4Y5Kxf_sDF7Kzg
In diesem Tutorial haben wir die Grundlagen der Einrichtung der JWT-Authentifizierung in einem Node.js- und Express-Backend behandelt. Dieser Leitfaden demonstrierte:
JWTs sind eine leistungsstarke Möglichkeit zur Authentifizierung und machen Ihre Webanwendungen sowohl sicher als auch skalierbar.
Das obige ist der detaillierte Inhalt vonErstellen und Sichern der JWT-Authentifizierung in einer Web-App. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!