NodeJS में पर्यावरण चर का उपयोग
dotenv का उपयोग
सीक्रेट्स और API टोकन को सुरक्षित रूप से हैंडल करना
संबंधित लेख: अपने टोकन की सुरक्षा करें
आइए secret और non-secret के बीच के अंतर को जल्दी से दोहराते हैं।
- 🔒
Secret keysको 3rd party API सेवाओं के लिए रिक्वेस्ट को छिपाने (प्रॉक्सी करने) के लिए कस्टम सर्वर (जैसे Node/Express/Heroku) का उपयोग करना अनिवार्य है। - 🌍
Non-secret keysउन कुंजियों को दर्शाती हैं जिन्हें ब्राउज़र में भेजा जा सकता है।
इस लेख में हम Environment Variables का उपयोग करके 🔒
Secret keysको हैंडल करने पर ध्यान केंद्रित करेंगे।
अवलोकन
आपके NodeJS कोड में सीक्रेट्स को सुरक्षित रूप से एक्सेस करने के लिए:
- हार्डकोडेड कुंजियों को एन्वायरमेंट वेरिएबल्स से बदलें। उदाहरण के लिए:
process.env.API_SECRET dotenvजैसी लाइब्रेरी और एक.envफ़ाइल का उपयोग करें। अपनी पहले से हार्डकोडेड सीक्रेट्स को.envफ़ाइल में जोड़ें।- अपने
.gitignoreफ़ाइल में.envलाइन की पुष्टि करें!
डिप्लॉयड सर्वर पर
.envफ़ाइल न बनाएं। अपने होस्टिंग प्रोवाइडर (जैसे Heroku, Netlify, AWS EC2) द्वारा प्रदान की गई एन्वायरमेंट वेरिएबल मैनेजमेंट टूल का उपयोग करें: उदाहरण के लिए डैशबोर्ड या कमांड लाइन।
कोड उदाहरण
हम कुछ फ़ाइलों को परिभाषित करने वाले हैं।
.env./db/connection.js./api/users.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 पैकेज इंस्टॉल करें।
npm install dotenvइसके बाद, अपने प्रोजेक्ट के रूट में एक .env फ़ाइल बनाएं।
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ कभी भी .env फ़ाइल को commit न करें।
❌ सर्वर पर .env फ़ाइल बनाने से बचें।
होस्टिंग प्रोवाइडर की दस्तावेज़ीकरण में environment variables सेटअप करने के निर्देश देखें।
.gitignore में .env लाइन होने की पुष्टि करने के लिए आसानी से जाँच करें।
# Automatically update .gitignore# Run in terminal:[ "$(grep '^.env' .gitignore)" == "" ] && echo '.env' >> .gitignore# note: no output will print./db/connection.js एक साझा pg.Pool इंस्टेंस प्रदान करता है। डेटाबेस क्वेरी करने के लिए इसका उपयोग किया जाएगा।
require('dotenv').config(); // ✅ Load .env fileconst 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 variablesmodule.exports = new pg.Pool();./api फ़ोल्डर में आपकी टेबल्स/व्यूज़ के लिए इंटरफ़ेस परिभाषित हैं।
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); }};- कभी भी अपने
.envसीक्रेट्स को git पर commit न करें! - टीम के साथ
.envफ़ाइलें शेयर न करें। *
* हर नई डेवलपमेंट लैपटॉप या डेस्कटॉप पर नए एक्सेस कीज़ और टोकन जनरेट किए जाने चाहिए।
यदि ऐसा संभव नहीं है, तो अपनी .env फ़ाइल शेयर करते समय अत्यधिक सावधानी बरतें (ऐसे मामलों में जहाँ कोई सेवा पुराने सभी कीज़ को अमान्य कर सकती है, या आपके पास एक पेड API का सीमित एक्सेस टोकन हो।)
⚠️ महत्वपूर्ण: यदि आवश्यक हो, तो हमेशा एक सुरक्षित मैसेजिंग सर्विस का उपयोग करें (प्राथमिकता के साथ expiring message सपोर्ट वाली।)
शुभकामनाएँ, और यदि आपके कोई प्रश्न हों तो मुझे बताएँ! 🎉