DanLevy.net

NodeJS में Environment Variables का उपयोग

dotenv का उपयोग

Hero image for NodeJS में Environment Variables का उपयोग

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

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

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



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

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

अवलोकन

अपने NodeJS कोड में secrets तक सुरक्षित रूप से पहुँचने के लिए:

  1. हार्ड-कोडेड keys को environment variables से बदलें। उदा. process.env.API_SECRET
  2. dotenv लाइब्रेरी के साथ .env फ़ाइल का उपयोग करें। अपनी पहले से हार्ड-कोडेड secrets को .env फ़ाइल में जोड़ें।
  3. अपनी .gitignore फ़ाइल में .env लाइन की पुष्टि करें!

न करें deployed servers पर .env फ़ाइल बनाएं। अपनी होस्टिंग सेवा (जैसे Heroku, Netlify, AWS EC2) के प्रदान किए गए environment variable प्रबंधन टूल का उपयोग करें: जैसे dashboard या command line।

कोड उदाहरण

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

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

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

Terminal window
npm install dotenv

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

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

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

❌ servers पर .env बनाने से बचें।

environment variables सेट अप करने के लिए अपने Hosting Provider के docs देखें।

आसानी से सुनिश्चित करने के लिए कि आपकी .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 instance प्रदान करती है। इसका उपयोग database को query करने के लिए किया जाएगा।

./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 फ़ोल्डर में आपकी tables/views के interfaces होते हैं।

यहाँ users table के लिए एक उदाहरण ./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);
}
};

* प्रत्येक नए development laptop या desktop को नए access keys और tokens जनरेट करने चाहिए। यदि यह संभव नहीं है, तो अपनी .env साझा करते समय पर्याप्त सावधानी बरतें (उन मामलों में जहाँ कोई सेवा सभी पुरानी keys को अमान्य कर सकती है, या आपके पास किसी paid API की सीमित access token हो।)

⚠️ महत्वपूर्ण: यदि आवश्यक हो, तो हमेशा secure messaging service ( preferably expiring message support के साथ) का उपयोग करें।

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