استخدام متغيرات البيئة في NodeJS
استخدام dotenv
التعامل الآمن مع الأسرار ورموز API
مقال ذو صلة: احمِ رموزك
دعنا نلخص بسرعة الفرق بين السر وغير السر.
- 🔒
المفاتيح السريةيجب أن تستخدم خادمًا مخصصًا (مثل Node/Express/Heroku) لإخفاء (توكيل) الطلبات إلى خدمات API تابعة لجهات خارجية. - 🌍
المفاتيح غير السريةتصف المفاتيح التي يمكن إرسالها إلى المتصفح.
سنركز في هذه المقالة على التعامل مع 🔒
المفاتيح السريةباستخدام متغيرات البيئة.
نظرة عامة
لـ الوصول الآمن إلى الأسرار في كود NodeJS الخاص بك:
- استبدل المفاتيح المكتوبة بشكل ثابت بمتغيرات البيئة. مثلًا:
process.env.API_SECRET - استخدم مكتبة مثل
dotenvمع ملف.env. أضف الأسرار التي كانت مكتوبة بشكل ثابت سابقًا إلى ملف.env. - تأكد من وجود سطر
.envفي ملف.gitignoreالخاص بك!
لا تنشئ ملف
.envعلى الخوادم المنشورة. استخدم أداة إدارة متغيرات البيئة التي توفرها خدمة الاستضافة (مثل Heroku، Netlify، AWS EC2): مثلًا لوحة التحكم أو سطر الأوامر.
مثال كود
سنقوم بتعريف عدد من الملفات.
.env./db/connection.js./api/users.js
أولًا، قم بتثبيت حزمة dotenv.
npm install dotenvبعد ذلك، أنشئ ملف .env في جذر مشروعك.
PGDATABASE="postgres"PGHOST="localhost"PGPORT=5234PGUSER="postgres"PGPASSWORD="password"❌ لا تقم أبدًا بإيداع ملف .env.
❌ تجنب إنشاء ملف .env على الخوادم.
راجع وثائق مزود الاستضافة الخاص بك لإعداد متغيرات البيئة.
لتتأكد بسهولة من وجود سطر .env في ملف .gitignore الخاص بك.
# 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 على واجهات لجداولك/عروضك.
إليك مثال ./api/users.js لجدول users.
const db = require('../db/connection.js');
module.exports = { findUsername: function(username) { return db.query('SELECT * FROM users WHERE username=$1', username); }};- لا تقم أبدًا بإيداع أسرار
.envفي git! - لا تشارك ملفات
.envمع الفريق. *
* يجب على كل حاسوب محمول أو مكتبي جديد للتطوير توليد مفاتيح وصول ورموز جديدة.
إذا لم يكن ذلك ممكنًا، فكن حذرًا جدًا عند مشاركة ملف .env (في الحالات التي قد تلغي فيها الخدمة جميع المفاتيح القديمة، أو كان لديك رمز وصول محدود لواجهة برمجة تطبيقات مدفوعة.)
⚠️ مهم: إذا لزم الأمر، استخدم دائمًا خدمة مراسلة آمنة (يفضل مع دعم الرسائل منتهية الصلاحية.)
حظًا موفقًا وأخبرني إذا كان لديك أي أسئلة! 🎉