DanLevy.net

NodeJS में पर्यावरण चर का उपयोग

dotenv का उपयोग

Hero image for NodeJS में पर्यावरण चर का उपयोग

सीक्रेट्स और API टोकन को सुरक्षित रूप से हैंडल करना

संबंधित लेख: अपने टोकन की सुरक्षा करें

आइए secret और non-secret के बीच के अंतर को जल्दी से दोहराते हैं।



इस लेख में हम Environment Variables का उपयोग करके 🔒 Secret keys को हैंडल करने पर ध्यान केंद्रित करेंगे।

कोड उदाहरण नीचे दिए गए हैं।

अवलोकन

आपके NodeJS कोड में सीक्रेट्स को सुरक्षित रूप से एक्सेस करने के लिए:

  1. हार्डकोडेड कुंजियों को एन्वायरमेंट वेरिएबल्स से बदलें। उदाहरण के लिए: process.env.API_SECRET
  2. dotenv जैसी लाइब्रेरी और एक .env फ़ाइल का उपयोग करें। अपनी पहले से हार्डकोडेड सीक्रेट्स को .env फ़ाइल में जोड़ें।
  3. अपने .gitignore फ़ाइल में .env लाइन की पुष्टि करें!

डिप्लॉयड सर्वर पर .env फ़ाइल न बनाएं। अपने होस्टिंग प्रोवाइडर (जैसे Heroku, Netlify, AWS EC2) द्वारा प्रदान की गई एन्वायरमेंट वेरिएबल मैनेजमेंट टूल का उपयोग करें: उदाहरण के लिए डैशबोर्ड या कमांड लाइन।

कोड उदाहरण

हम कुछ फ़ाइलों को परिभाषित करने वाले हैं।

  1. .env
  2. ./db/connection.js
  3. ./api/users.js
./db/config.js
module.exports = {
postgres: {
host: process.env.PGHOST || 'localhost',
port: process.env.PGPORT || 5234,
user: process.env.PGUSER || 'postgres',
password: process.env.PGPASSWORD || 'password',
database: process.env.PGDATABASE || 'postgres',
}
};

db/config.js फ़ाइल केवल एक उदाहरण है कि आपके सीक्रेट्स को आपके कोड में पुनः उपयोग के लिए कैसे स्टोर किया जाना चाहिए।

पहले, dotenv पैकेज इंस्टॉल करें।

Terminal window
npm install dotenv

इसके बाद, अपने प्रोजेक्ट के रूट में एक .env फ़ाइल बनाएं।

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

कभी भी .env फ़ाइल को commit न करें।

❌ सर्वर पर .env फ़ाइल बनाने से बचें।

होस्टिंग प्रोवाइडर की दस्तावेज़ीकरण में environment variables सेटअप करने के निर्देश देखें।

.gitignore में .env लाइन होने की पुष्टि करने के लिए आसानी से जाँच करें।

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

./db/connection.js एक साझा pg.Pool इंस्टेंस प्रदान करता है। डेटाबेस क्वेरी करने के लिए इसका उपयोग किया जाएगा।

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

./api फ़ोल्डर में आपकी टेबल्स/व्यूज़ के लिए इंटरफ़ेस परिभाषित हैं।

users टेबल के लिए एक उदाहरण ./api/users.js यहाँ दिया गया है।

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

* हर नई डेवलपमेंट लैपटॉप या डेस्कटॉप पर नए एक्सेस कीज़ और टोकन जनरेट किए जाने चाहिए। यदि ऐसा संभव नहीं है, तो अपनी .env फ़ाइल शेयर करते समय अत्यधिक सावधानी बरतें (ऐसे मामलों में जहाँ कोई सेवा पुराने सभी कीज़ को अमान्य कर सकती है, या आपके पास एक पेड API का सीमित एक्सेस टोकन हो।)

⚠️ महत्वपूर्ण: यदि आवश्यक हो, तो हमेशा एक सुरक्षित मैसेजिंग सर्विस का उपयोग करें (प्राथमिकता के साथ expiring message सपोर्ट वाली।)

शुभकामनाएँ, और यदि आपके कोई प्रश्न हों तो मुझे बताएँ! 🎉