DanLevy.net

Umgebungsvariablen in NodeJS verwenden

dotenv verwenden

Hero image for Umgebungsvariablen in NodeJS verwenden

Geheimnisse und API-Token sicher handhaben

Verwandter Artikel: Protect Your Tokens

Kurze Zusammenfassung des Unterschieds zwischen secret und non-secret:



In diesem Artikel konzentrieren wir uns auf den Umgang mit 🔒 Geheimen Schlüsseln mithilfe von Umgebungsvariablen.

Codebeispiele finden Sie unten.

Übersicht

So greifen Sie sicher auf Geheimnisse in Ihrem NodeJS-Code zu:

  1. Ersetzen Sie hartcodierte Schlüssel durch Umgebungsvariablen, z. B. process.env.API_SECRET
  2. Verwenden Sie eine Bibliothek wie dotenv zusammen mit einer .env-Datei. Fügen Sie Ihre zuvor hartcodierten Geheimnisse in die .env-Datei ein.
  3. Prüfen Sie, ob die .env-Zeile in Ihrer .gitignore-Datei vorhanden ist!

NICHT auf bereitgestellten Servern eine .env-Datei erstellen. Verwenden Sie das vom Hosting-Service (z. B. Heroku, Netlify, AWS EC2) bereitgestellte Tool zur Verwaltung von Umgebungsvariablen, z. B. Dashboard oder Befehlszeile.

Codebeispiel

Wir definieren einige Dateien.

  1. .env
  2. ./db/connection.js
  3. ./api/users.js

Zuerst installieren Sie das Paket dotenv.

Terminal window
npm install dotenv

Erstellen Sie als Nächstes eine .env-Datei im Stammverzeichnis Ihres Projekts.

.env
PGDATABASE="postgres"
PGHOST="localhost"
PGPORT=5234
PGUSER="postgres"
PGPASSWORD="password"

NIEMALS die .env-Datei committen.

❌ Vermeiden Sie das Erstellen von .env auf Servern.

Schlagen Sie in der Dokumentation Ihres Hosting-Anbieters nach, wie Sie Umgebungsvariablen einrichten.

So stellen Sie sicher, dass Ihre .gitignore eine .env-Zeile enthält:

Terminal window
# Automatically update .gitignore
# Run in terminal:
[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore
# note: no output will print

Die Datei ./db/connection.js stellt eine gemeinsame pg.Pool-Instanz bereit. Sie wird zum Abfragen der Datenbank verwendet.

./db/connection.js
require('dotenv').config(); // ✅ Load .env file
const pg = require('pg');
const {PGUSER, PGHOST, PGPORT} = process.env;
if (process.env.NODE_ENV === 'development')
console.log(`Connecting to ${PGUSER} @ ${PGHOST}:${PGHOST}`);
// ^^ only for showing debug connection vars
// pg automatically uses PG* env variables
module.exports = new pg.Pool();

Der Ordner ./api enthält Schnittstellen zu Ihren Tabellen/Views.

Hier ist ein Beispiel für ./api/users.js für die Tabelle users.

./api/users.js
const db = require('../db/connection.js');
module.exports = {
findUsername: function(username) {
return db.query('SELECT * FROM users WHERE username=$1', username);
}
};

* Jeder neue Entwicklungs-Laptop oder -Desktop sollte neue Zugriffsschlüssel und Token generieren. Wenn dies nicht möglich ist, gehen Sie mit größter Sorgfalt beim Teilen Ihrer .env-Datei vor (in Fällen, in denen ein Dienst alle älteren Schlüssel ungültig machen könnte oder Sie ein begrenztes API-Zugriffstoken haben.)

⚠️ Wichtig: Verwenden Sie im Zweifelsfall immer einen sicheren Nachrichtendienst (vorzugsweise mit Unterstützung für automatisch ablaufende Nachrichten.)

Viel Erfolg und lassen Sie mich wissen, wenn Sie Fragen haben! 🎉