Heim >Web-Frontend >js-Tutorial >Benutzerauthentifizierungs-API mit Express, JWT, Bcrypt und MySQL
Diese Anwendung ist ein einfacher Authentifizierungsserver, der mit Express erstellt wurde und JSON Web Tokens (JWT) für die Sitzungsverwaltung und bcrypt für die sichere Speicherung von Passwörtern verwendet. Benutzer können sich registrieren und anmelden, um auf geschützte Routen zuzugreifen. MySQL wird zum Speichern von Benutzerdaten verwendet.
1. Express.js: Web-Framework zur Handhabung von Routen und Middleware.
2. bcrypt.js: Bibliothek zum sicheren Hashing von Passwörtern.
3. jsonwebtoken: Bibliothek zum Erstellen und Überprüfen von JWT-Tokens.
4. mysql2: MySQL-Client für Node.js mit Unterstützung für Promises.
5. cookie-parser: Middleware zum Parsen von Cookies.
1. Erforderliche Bibliotheken importieren
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cookieParser = require('cookie-parser'); const mysql = require('mysql2/promise');
const app = express(); const PORT = 3000; const JWT_SECRET = 'your_jwt_secret_key';
const db = await mysql.createConnection({ host: 'localhost', user: 'your_mysql_user', password: 'your_mysql_password', database: 'user_auth' });
app.use(express.json()); app.use(cookieParser());
/registrieren
Diese Route registriert einen neuen Benutzer, indem sein Passwort gehasht und in der Datenbank gespeichert wird.
const express = require('express'); const jwt = require('jsonwebtoken'); const bcrypt = require('bcryptjs'); const cookieParser = require('cookie-parser'); const mysql = require('mysql2/promise');
/login
Diese Route meldet einen vorhandenen Benutzer an, indem er seine Anmeldeinformationen überprüft und ein JWT-Token generiert.
const app = express(); const PORT = 3000; const JWT_SECRET = 'your_jwt_secret_key';
Die VerifyToken-Middleware stellt sicher, dass nur Anfragen mit einem gültigen JWT-Token auf geschützte Routen zugreifen können.
const db = await mysql.createConnection({ host: 'localhost', user: 'your_mysql_user', password: 'your_mysql_password', database: 'user_auth' });
Eine geschützte Beispielroute, die nur authentifizierten Benutzern zugänglich ist. Es gibt eine personalisierte Begrüßung mit dem Namen des Benutzers aus dem Token zurück.
app.use(express.json()); app.use(cookieParser());
Der Server lauscht am definierten PORT.
app.post('/register', async (req, res) => { const { name, email, password } = req.body; try { // Check if user already exists const [rows] = await db.execute('SELECT * FROM users WHERE email = ?', [email]); if (rows.length > 0) { return res.status(400).json({ message: 'User already exists' }); } // Hash the password const hashedPassword = await bcrypt.hash(password, 10); // Save the user in the database await db.execute('INSERT INTO users (name, email, password) VALUES (?, ?, ?)', [name, email, hashedPassword]); res.status(201).json({ message: 'User registered successfully!' }); } catch (error) { console.error(error); res.status(500).json({ message: 'Server error' }); } });
app.post('/login', async (req, res) => { const { email, password } = req.body; try { // Find user const [rows] = await db.execute('SELECT * FROM users WHERE email = ?', [email]); const user = rows[0]; if (!user) { return res.status(400).json({ message: 'User not found' }); } // Check password const isMatch = await bcrypt.compare(password, user.password); if (!isMatch) { return res.status(400).json({ message: 'Invalid credentials' }); } // Create JWT token const token = jwt.sign({ id: user.id, name: user.name, email: user.email }, JWT_SECRET, { expiresIn: '1h' }); // Set JWT in cookie res.cookie('token', token, { httpOnly: true, secure: process.env.NODE_ENV === 'production', sameSite: 'Strict', maxAge: 3600000 // 1 hour }); res.json({ message: 'Logged in successfully!' }); } catch (error) { console.error(error); res.status(500).json({ message: 'Server error' }); } });
Diese Anwendung:
Das obige ist der detaillierte Inhalt vonBenutzerauthentifizierungs-API mit Express, JWT, Bcrypt und MySQL. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!