رموز JWT في JavaScript (Node.js): دليل شامل

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

رموز JWT في JavaScript (Node.js): دليل شامل لمكتبة jsonwebtoken

JSON Web Token (JWT) هو معيار مفتوح (RFC 7519) لإنشاء رموز وصول تعتمد على JSON. يُستخدم JWT على نطاق واسع للمصادقة وتبادل المعلومات بين العميل والخادم. في نظام Node.js، المكتبة الأكثر شيوعًا للعمل مع JWT هي jsonwebtoken. في هذه المقالة، سنشرح بالتفصيل كيفية تثبيت هذه المكتبة وتكوينها واستخدامها لإنشاء تطبيقات ويب آمنة.



ما هو JWT ولماذا نحتاجه؟

يمثل JWT سلسلة تتكون من ثلاثة أجزاء مفصولة بنقاط: Header (الرأس)، Payload (الحمولة)، وSignature (التوقيع). يبدو الرمز كالتالي: xxxxx.yyyyy.zzzzz. المزايا الرئيسية لـ JWT:

  • الأمان — يتم توقيع الرمز بمفتاح سري أو زوج مفاتيح (RSA/ECDSA)، مما يضمن سلامته.
  • الاكتفاء الذاتي — جميع المعلومات اللازمة للتحقق من الصحة موجودة في الرمز نفسه، مما يقلل من عدد الطلبات إلى قاعدة البيانات.
  • التعددية المنصات — يعمل JWT مع أي لغة برمجة ومنصة.
  • المرونة — يمكنك إضافة أي بيانات مخصصة إلى الحمولة (مثل معرف المستخدم، الدور).


تثبيت مكتبة jsonwebtoken

للعمل مع JWT في Node.js، قم بتثبيت الحزمة jsonwebtoken عبر npm:

npm install jsonwebtoken

بعد التثبيت، قم بتضمين المكتبة في ملفك:

const jwt = require('jsonwebtoken');


توليد (توقيع) رمز JWT

لإنشاء رمز، يُستخدم الأسلوب jwt.sign(payload, secretOrPrivateKey, options). لننظر إلى مثال أساسي:

const jwt = require('jsonwebtoken');

const payload = { userId: 123, role: 'user'};

const secretKey = 'my_super_secret_key_123';

const token = jwt.sign(payload, secretKey, { expiresIn: '1h', // الرمز سينتهي بعد ساعة واحدة algorithm: 'HS256' // خوارزمية التوقيع (الافتراضي HS256)});

console.log('الرمز المولد:', token);

هام: لا تقم أبدًا بتخزين المفتاح السري في الكود. استخدم متغيرات البيئة (ملف .env). للقيام بذلك، قم بتثبيت الحزمة dotenv:

npm install dotenv

مثال على الاستخدام مع متغيرات البيئة:

require('dotenv').config();const jwt = require('jsonwebtoken');

const token = jwt.sign( { userId: 456 }, process.env.JWT_SECRET, { expiresIn: '7d' });


التحقق من رمز JWT

للتحقق من صحة الرمز، يُستخدم الأسلوب jwt.verify(token, secretOrPublicKey, options). يقوم بإرجاع الحمولة إذا كان الرمز صالحًا، أو يرمي خطأ إذا كان الرمز منتهي الصلاحية أو غير صالح.

const token = 'رمزك_هنا';

try { const decoded = jwt.verify(token, process.env.JWT_SECRET); console.log('البيانات المفكوكة:', decoded); // { userId: 456, iat: 1700000000, exp: 1700600000 }} catch (err) { if (err.name === 'TokenExpiredError') { console.log('الرمز منتهي الصلاحية'); } else if (err.name === 'JsonWebTokenError') { console.log('رمز غير صالح'); } else { console.log('خطأ في التحقق:', err.message); }}

لاحظ الحقول iat (وقت الإنشاء) وexp (وقت الانتهاء)، والتي تُضاف تلقائيًا إذا تم تحديد المعامل expiresIn.



Middleware لـ Express.js

في التطبيقات الحقيقية، يتم عادةً التحقق من JWT في middleware. إليك مثال لـ Express.js:

const express = require('express');const jwt = require('jsonwebtoken');require('dotenv').c                    

توصيات