Authentifizierung ist eine entscheidende Komponente in modernen Webanwendungen, mit der Entwickler sicherstellen können, dass nur autorisierte Benutzer auf bestimmte Funktionen oder Daten zugreifen können. In einer Node.js- und Express-basierten Anwendung wird die Authentifizierung aufgrund ihrer Effizienz und Sicherheit normalerweise mithilfe von Tokens, am häufigsten JSON Web Tokens (JWT), abgewickelt.
In diesem Leitfaden erfahren Sie, wie Sie die Benutzerauthentifizierung in einer Node.js- und Express-Anwendung mithilfe von JWTs einrichten. Am Ende verfügen Sie über ein solides Verständnis dafür, wie Sie eine sichere Authentifizierung für Ihre eigenen Projekte implementieren können.
Authentifizierung ist der Prozess der Überprüfung der Identität eines Benutzers oder Systems. Bei Webanwendungen geht es darum, Benutzeranmeldeinformationen wie Benutzername und Passwort zu überprüfen. Nach erfolgreicher Überprüfung ermöglicht das System dem Benutzer die Interaktion mit der Anwendung. Zur Erhöhung der Sicherheit werden häufig tokenbasierte Authentifizierungen wie JWTs verwendet.
JWTs sind ein Industriestandard (RFC 7519) für sichere und zustandslose tokenbasierte Authentifizierung. Sie ermöglichen die sichere Übertragung von Informationen zwischen Parteien als JSON-Objekt. Token werden oft verwendet, um die Identität eines Benutzers zu überprüfen, ohne dass Sitzungsdaten auf dem Server gespeichert werden müssen, was JWT zu einer großartigen Wahl für zustandslose Anwendungen macht.
Lassen Sie uns die Implementierung eines Basisauthentifizierungssystems mithilfe von JWT in Node.js und Express aufschlüsseln.
Bevor wir uns mit der Authentifizierung befassen, müssen wir eine grundlegende Node.js- und Express-Anwendung einrichten. Befolgen Sie diese Schritte, um Ihr Projekt zu initialisieren:
mkdir auth-demo cd auth-demo npm init -y npm install express bcryptjs jsonwebtoken mongoose dotenv
Hier erfahren Sie, wozu jede Abhängigkeit dient:
Erstellen Sie eine .env-Datei im Stammverzeichnis Ihres Projekts, um vertrauliche Informationen wie Ihren Datenbank-URI und Ihren geheimen JWT-Schlüssel zu speichern.
MONGODB_URI=mongodb://localhost:27017/auth-demo JWT_SECRET=your_jwt_secret_key
Erstellen Sie im Stammverzeichnis des Projekts eine db.js-Datei in einem Konfigurationsordner, um die MongoDB-Verbindung zu verwalten.
// config/db.js const mongoose = require('mongoose'); const dotenv = require('dotenv'); dotenv.config(); const connectDB = async () => { try { await mongoose.connect(process.env.MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true, }); console.log('MongoDB connected'); } catch (err) { console.error('Error connecting to MongoDB:', err.message); process.exit(1); } }; module.exports = connectDB;
Als nächstes erstellen Sie ein Benutzermodell, um die Struktur von Benutzerdokumenten in MongoDB zu definieren. Erstellen Sie in einem Modellordner User.js:
// models/User.js const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true }, password: { type: String, required: true }, }); module.exports = mongoose.model('User', userSchema);
Wir richten nun die Route für die Benutzerregistrierung ein. Erstellen Sie im Controller-Ordner eine Datei mit dem Namen authController.js und implementieren Sie die Registrierungslogik.
// controllers/authController.js const User = require('../models/User'); const bcrypt = require('bcryptjs'); const jwt = require('jsonwebtoken'); // User registration exports.register = async (req, res) => { const { username, password } = req.body; try { const existingUser = await User.findOne({ username }); if (existingUser) { return res.status(400).json({ message: 'Username already exists' }); } const hashedPassword = await bcrypt.hash(password, 10); const newUser = new User({ username, password: hashedPassword }); await newUser.save(); res.status(201).json({ message: 'User registered successfully' }); } catch (err) { res.status(500).json({ error: err.message }); } };
Diese Logik hasht das Passwort mit bcrypt, bevor die Benutzerinformationen in MongoDB gespeichert werden.
Die Anmeldung ist entscheidend für die Generierung und Rückgabe von JWTs, die der Client zur Authentifizierung zukünftiger Anfragen verwenden wird. So implementieren Sie die Anmeldelogik:
// controllers/authController.js (continue) exports.login = async (req, res) => { const { username, password } = req.body; try { const user = await User.findOne({ username }); if (!user) { return res.status(401).json({ message: 'Invalid username or password' }); } const isPasswordValid = await bcrypt.compare(password, user.password); if (!isPasswordValid) { return res.status(401).json({ message: 'Invalid username or password' }); } const token = jwt.sign({ id: user._id }, process.env.JWT_SECRET, { expiresIn: '1h' }); res.json({ token }); } catch (err) { res.status(500).json({ error: err.message }); } };
Wenn die Anmeldung erfolgreich ist, generieren wir ein JWT mit jsonwebtoken und senden es an den Client.
JWTs sind nützlich zum Schutz von Routen, die eine Authentifizierung erfordern. Wir erstellen Middleware, um das Token zu überprüfen und sicherzustellen, dass nur autorisierte Benutzer auf bestimmte Endpunkte zugreifen können.
// middleware/authMiddleware.js const jwt = require('jsonwebtoken'); exports.verifyToken = (req, res, next) => { const token = req.headers['authorization']; if (!token) return res.sendStatus(403); jwt.verify(token, process.env.JWT_SECRET, (err, user) => { if (err) return res.sendStatus(403); req.user = user; next(); }); };
Zuletzt wenden wir die Middleware an, um eine Route zu schützen. Beispielsweise möchten Sie möglicherweise, dass Benutzer erst nach der Anmeldung auf ihr Profil zugreifen können:
// routes/userRoutes.js const express = require('express'); const { verifyToken } = require('../middleware/authMiddleware'); const { getUserProfile } = require('../controllers/userController'); const router = express.Router(); router.get('/profile', verifyToken, getUserProfile); module.exports = router;
Die VerifyToken-Middleware prüft, ob in den Headern der Anfrage ein gültiges JWT vorhanden ist, und ermöglicht den Zugriff auf die Route, wenn das Token verifiziert ist.
In diesem Leitfaden haben wir die Grundlagen der Implementierung der Benutzerauthentifizierung mithilfe von JWT in einer Node.js- und Express-Anwendung behandelt. Wir haben die Benutzerregistrierung, die Anmeldung und den Schutz von Routen mithilfe der tokenbasierten Authentifizierung eingerichtet. Auf dieser Grundlage können Sie robuste, sichere Authentifizierungssysteme in Ihren eigenen Anwendungen aufbauen. Erwägen Sie bei der Weiterentwicklung das Hinzufügen von Aktualisierungstokens, der Funktion zum Zurücksetzen von Passwörtern und der Multi-Faktor-Authentifizierung für mehr Sicherheit.
Wenn Sie die Authentifizierung mit Node.js und Express beherrschen, sind Sie auf dem besten Weg, skalierbare, sichere Webanwendungen zu erstellen.
Das obige ist der detaillierte Inhalt vonBeherrschen der Authentifizierung in Node.js und Express: Ein umfassender Leitfaden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!