Verwenden von Umgebungsvariablen in NodeJS
Verwenden von dotenv
Sichere Handhabung von Geheimnissen und API-Token
Verwandter Artikel: Schützen Sie Ihre Tokens
Lassen Sie uns kurz die Unterschiede zwischen Geheimnissen und nicht-geheimen Schlüsseln zusammenfassen.
- 🔒
Geheimnissemüssen einen benutzerdefinierten Server (z. B. Node/Express/Heroku) verwenden, um Anfragen an Drittanbieter-API-Dienste zu verbergen (Proxy). - 🌍
Nicht-geheime Schlüsselbeziehen sich auf Schlüssel, die an den Browser gesendet werden können.
Wir konzentrieren uns in diesem Artikel auf die Verwendung von Umgebungsvariablen, um 🔒 Geheimnisse zu verwalten.
Unten finden Sie Beispiele für Code.
Übersicht
Um Geheimnisse in Ihrem NodeJS-Code sicher zu nutzen:
- Ersetzen Sie hartcodierte Schlüssel durch Umgebungsvariablen. z. B.
process.env.API_SECRET - Verwenden Sie eine Bibliothek wie
dotenvzusammen mit einer.env-Datei. Fügen Sie die zuvor hartcodierten Geheimnisse in die.env-Datei ein. - Stellen Sie sicher, dass die
.env-Datei in Ihrer.gitignore-Datei ausgeschlossen ist!
ERSTELLEN SIE NICHT eine
.env-Datei auf bereitgestellten Servern. Nutzen Sie stattdessen das von Ihrem Hosting-Anbieter (z. B. Heroku, Netlify, AWS EC2) bereitgestellte Tool zur Verwaltung von Umgebungsvariablen, z. B. Dashboard oder Befehlszeile.
Code-Beispiel
Wir definieren einige Dateien.
.env./db/connection.js./api/users.js
Zunächst installieren Sie das Paket dotenv.
npm install dotenvErstellen Sie anschließend eine Datei .env in der Wurzel Ihres Projekts.
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ NIEMALS die .env-Datei committen.
❌ Vermeiden Sie die Erstellung von .env auf Servern.
Überprüfen Sie die Dokumentation Ihres Hosting-Anbieters, um Umgebungsvariablen einzurichten.
Um sicherzustellen, dass Ihre .gitignore-Datei eine Zeile mit .env enthält:
# Automatisch .gitignore aktualisieren# Ausführen im Terminal:[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# Hinweis: Es wird keine Ausgabe angezeigtDie Datei ./db/connection.js stellt eine gemeinsame pg.Pool-Instanz bereit. Sie wird verwendet, um die Datenbank abzufragen.
require('dotenv').config(); // ✅ .env-Datei ladenconst pg = require('pg');const {PGUSER, PGHOST, PGPORT} = process.env;
if (process.env.NODE_ENV === 'development') console.log(`Verbinde mit ${PGUSER} @ ${PGHOST}:${PGHOST}`);// ^^ nur für Anzeige von Debug-Verbindungsvariablen
// pg verwendet automatisch die PG*-Umgebungsvariablenmodule.exports = new pg.Pool();Der Ordner ./api enthält Schnittstellen zu Ihren Tabellen/Ansichten.
Hier ist ein Beispiel ./api/users.js für die users-Tabelle.
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};- Committe nie Ihre
.env-Geheimnisse in Git! - Teilen Sie
.env-Dateien nicht mit anderen Entwicklern.*
- Jeder neue Entwicklungs-PC oder Desktop sollte neue Zugriffskeys und Tokens generieren.
Wenn dies nicht möglich ist, teilen Sie Ihre
.env-Datei mit äußerster Vorsicht (insbesondere wenn ein Dienst alle älteren Keys ungültig machen könnte oder Sie bezahlte APIs mit begrenzten Zugangstoken verwenden.)
⚠️ Wichtig: Falls notwendig, verwenden Sie immer einen sicheren Messaging-Dienst (am besten mit Unterstützung für ablaufende Nachrichten.)
Viel Erfolg und lassen Sie mich wissen, wenn Sie Fragen haben! 🎉