DanLevy.net

Utilisation des variables d'environnement dans NodeJS

Utilisation de dotenv

Hero image for Utilisation des variables d'environnement dans NodeJS

Gérer les secrets et les tokens API en toute sécurité

Article connexe : Protégez vos tokens

Rappelons rapidement la différence entre secret et non-secret.



Nous nous concentrerons sur la gestion des 🔒 clés secrètes à l’aide des variables d’environnement dans cet article.

Des exemples de code sont inclus ci-dessous.

Aperçu

Pour accéder en toute sécurité aux secrets dans votre code NodeJS :

  1. Remplacez les clés codées en dur par des variables d’environnement. ex. process.env.API_SECRET
  2. Utilisez une bibliothèque comme dotenv avec un fichier .env. Ajoutez vos secrets précédemment codés en dur au fichier .env.
  3. Vérifiez la ligne .env dans votre fichier .gitignore !

NE créez PAS de fichier .env sur les serveurs déployés. Utilisez l’outil de gestion des variables d’environnement fourni par votre service d’hébergement (ex. Heroku, Netlify, AWS EC2) : ex. tableau de bord ou ligne de commande.

Exemple de code

Nous allons définir quelques fichiers.

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

Commencez par installer le package dotenv.

Terminal window
npm install dotenv

Ensuite, créez un fichier .env à la racine de votre projet.

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

NE commitez JAMAIS le fichier .env.

❌ Évitez de créer un .env sur les serveurs.

Consultez la documentation de votre hébergeur pour configurer les variables d’environnement.

Pour vous assurer facilement que votre .gitignore contient une ligne .env.

Terminal window
# Mettre à jour automatiquement .gitignore
# Exécutez dans le terminal :
[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore
# remarque : aucune sortie ne s'affichera

Le fichier ./db/connection.js fournit une instance pg.Pool partagée. Il sera utilisé pour interroger la base de données.

./db/connection.js
require('dotenv').config(); // ✅ Charger le fichier .env
const pg = require('pg');
const {PGUSER, PGHOST, PGPORT} = process.env;
if (process.env.NODE_ENV === 'development')
console.log(`Connecting to ${PGUSER} @ ${PGHOST}:${PGHOST}`);
// ^^ uniquement pour afficher les variables de connexion de débogage
// pg utilise automatiquement les variables d'environnement PG*
module.exports = new pg.Pool();

Le dossier ./api contient les interfaces vers vos tables/vues.

Voici un exemple ./api/users.js pour la table 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);
}
};

* Chaque nouvel ordinateur de développement (portable ou bureau) doit générer de nouvelles clés et tokens d’accès. Si ce n’est pas possible, faites très attention en partageant votre .env (dans les cas où un service pourrait invalider toutes les anciennes clés, ou si vous disposez d’un token d’accès limité à une API payante).

⚠️ Important : si nécessaire, utilisez toujours un service de messagerie sécurisé (de préférence avec support de messages à expiration.)

Bonne chance et n’hésitez pas si vous avez des questions ! 🎉