DanLevy.net

استخدام متغيرات البيئة في NodeJS

استخدام dotenv

Hero image for استخدام متغيرات البيئة في NodeJS

التعامل الآمن مع الأسرار ورموز API

مقال ذو صلة: احمِ رموزك

دعنا نلخص بسرعة الفرق بين السر وغير السر.



سنركز في هذه المقالة على التعامل مع 🔒 المفاتيح السرية باستخدام متغيرات البيئة.

أمثلة الكود مرفقة أدناه.

نظرة عامة

لـ الوصول الآمن إلى الأسرار في كود NodeJS الخاص بك:

  1. استبدل المفاتيح المكتوبة بشكل ثابت بمتغيرات البيئة. مثلًا: process.env.API_SECRET
  2. استخدم مكتبة مثل dotenv مع ملف .env. أضف الأسرار التي كانت مكتوبة بشكل ثابت سابقًا إلى ملف .env.
  3. تأكد من وجود سطر .env في ملف .gitignore الخاص بك!

لا تنشئ ملف .env على الخوادم المنشورة. استخدم أداة إدارة متغيرات البيئة التي توفرها خدمة الاستضافة (مثل Heroku، Netlify، AWS EC2): مثلًا لوحة التحكم أو سطر الأوامر.

مثال كود

سنقوم بتعريف عدد من الملفات.

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

أولًا، قم بتثبيت حزمة dotenv.

Terminal window
npm install dotenv

بعد ذلك، أنشئ ملف .env في جذر مشروعك.

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

لا تقم أبدًا بإيداع ملف .env.

❌ تجنب إنشاء ملف .env على الخوادم.

راجع وثائق مزود الاستضافة الخاص بك لإعداد متغيرات البيئة.

لتتأكد بسهولة من وجود سطر .env في ملف .gitignore الخاص بك.

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 على واجهات لجداولك/عروضك.

إليك مثال ./api/users.js لجدول 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 (في الحالات التي قد تلغي فيها الخدمة جميع المفاتيح القديمة، أو كان لديك رمز وصول محدود لواجهة برمجة تطبيقات مدفوعة.)

⚠️ مهم: إذا لزم الأمر، استخدم دائمًا خدمة مراسلة آمنة (يفضل مع دعم الرسائل منتهية الصلاحية.)

حظًا موفقًا وأخبرني إذا كان لديك أي أسئلة! 🎉