Utilisation des variables d'environnement dans NodeJS
Utilisation de dotenv
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.
- 🔒 Les
clés secrètesDOIVENT utiliser un serveur personnalisé (ex. Node/Express/Heroku) afin de masquer (proxyfier) les requêtes vers les services API tiers. - 🌍 Les
clés non secrètesdésignent les clés qui peuvent être envoyées au navigateur.
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 :
- Remplacez les clés codées en dur par des variables d’environnement. ex.
process.env.API_SECRET - Utilisez une bibliothèque comme
dotenvavec un fichier.env. Ajoutez vos secrets précédemment codés en dur au fichier.env. - Vérifiez la ligne
.envdans votre fichier.gitignore!
NE créez PAS de fichier
.envsur 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.
.env./db/connection.js./api/users.js
Commencez par installer le package dotenv.
npm install dotenvEnsuite, créez un fichier .env à la racine de votre projet.
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="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.
# Mettre à jour automatiquement .gitignore# Exécutez dans le terminal :[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# remarque : aucune sortie ne s'afficheraLe fichier ./db/connection.js fournit une instance pg.Pool partagée. Il sera utilisé pour interroger la base de données.
require('dotenv').config(); // ✅ Charger le fichier .envconst 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.
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};- Ne commitez jamais vos secrets
.envdans git ! - Ne partagez pas les fichiers
.enven équipe. *
* 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 ! 🎉