DanLevy.net

Utilizzare le variabili d'ambiente in Node.js

Utilizzo di dotenv

Hero image for Utilizzare le variabili d'ambiente in Node.js

Gestione sicura di segreti e token API

Articolo correlato: Proteggi i tuoi token

Facciamo un rapido riepilogo della differenza concettuale tra segreta e non segreta.



In questo articolo ci concentreremo sulla gestione delle 🔒 chiavi segrete tramite Variabili d’Ambiente.

Gli esempi di codice sono inclusi di seguito.

Panoramica

Per accedere in modo sicuro ai segreti nel tuo codice NodeJS:

  1. Sostituisci le chiavi hard-coded con variabili d’ambiente. Es. process.env.API_SECRET
  2. Utilizza una libreria come dotenv insieme a un file .env. Aggiungi i segreti precedentemente hard-coded al file .env.
  3. Verifica la presenza della riga .env nel tuo file .gitignore!

NON creare un file .env sui server in produzione. Utilizza lo strumento di gestione delle variabili d’ambiente fornito dal tuo provider di hosting (es. Heroku, Netlify, AWS EC2): es. dashboard o riga di comando.

Esempio di codice

Definiremo alcuni file.

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

Innanzitutto, installa il pacchetto dotenv.

Terminal window
npm install dotenv

Successivamente, crea un file .env nella directory root del progetto.

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

MAI eseguire il commit del file .env.

❌ Evita di creare file .env sui server.

Consulta la documentazione del tuo Hosting Provider per configurare le variabili d’ambiente.

Per assicurarti facilmente che il tuo .gitignore contenga una riga per .env.

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

Il file ./db/connection.js fornisce un’istanza condivisa di pg.Pool. Verrà utilizzata per eseguire query sul database.

./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();

La cartella ./api contiene le interfacce verso le tue tabelle/viste.

Ecco un esempio di ./api/users.js per la tabella 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);
}
};

* Ogni nuovo laptop o desktop di sviluppo dovrebbe generare nuove chiavi di accesso e token. Se non è possibile, presta molta attenzione quando condividi il tuo .env (nei casi in cui un servizio potrebbe invalidare tutte le chiavi precedenti, o disponi di un token di accesso limitato per un’API a pagamento.)

⚠️ Importante: se necessario, utilizza sempre un servizio di messaggistica sicura (preferibilmente con supporto per messaggi a scadenza.)

Buona fortuna e fammi sapere se hai domande! 🎉