Heim > Web-Frontend > js-Tutorial > Hauptteil

Beherrschen der Authentifizierung in Node.js und Express: Ein umfassender Leitfaden

Barbara Streisand
Freigeben: 2024-10-04 16:20:29
Original
751 Leute haben es durchsucht

Mastering Authentication in Node.js and Express: A Comprehensive Guide

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.

Was ist Authentifizierung?

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.

Warum JSON Web Tokens (JWT) verwenden?

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.

Schritt für Schritt: Authentifizierung in Node.js und Express implementieren

Lassen Sie uns die Implementierung eines Basisauthentifizierungssystems mithilfe von JWT in Node.js und Express aufschlüsseln.

1. Einrichten Ihrer Node.js-Anwendung

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


Nach dem Login kopieren

Hier erfahren Sie, wozu jede Abhängigkeit dient:

  • Express: Framework zum Aufbau unseres Node.js-Servers.
  • bcryptjs: Zum sicheren Hashen und Vergleichen von Passwörtern.
  • jsonwebtoken: Zum Generieren und Überprüfen von JWTs.
  • mongoose: Zur Interaktion mit MongoDB.
  • dotenv: Zum Verwalten von Umgebungsvariablen wie Geheimnissen und Datenbankverbindungszeichenfolgen.

2. Umgebungsvariablen konfigurieren

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


Nach dem Login kopieren

3. Verbindung zu MongoDB herstellen

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;


Nach dem Login kopieren

4. Erstellen des Benutzermodells

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);


Nach dem Login kopieren

5. Implementierung der Benutzerregistrierung

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 });
  }
};


Nach dem Login kopieren

Diese Logik hasht das Passwort mit bcrypt, bevor die Benutzerinformationen in MongoDB gespeichert werden.

6. Benutzeranmeldung implementieren

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 });
  }
};


Nach dem Login kopieren

Wenn die Anmeldung erfolgreich ist, generieren wir ein JWT mit jsonwebtoken und senden es an den Client.

7. Middleware für geschützte Routen einrichten

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();
  });
};


Nach dem Login kopieren

8. Anwenden der Authentifizierungs-Middleware

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;


Nach dem Login kopieren

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.

Fazit

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!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage