تعرف على كيفية التعامل مع المصادقة مع Node باستخدام Passport.js

ادعمني بقراءته من مصدره الأصلي: ORIGINAL SOURCE

ستتعلم في هذه المقالة كيفية معالجة المصادقة لخادم Node الخاص بك باستخدام Passport.js. لا تغطي هذه المقالة مصادقة الواجهة الأمامية. استخدم هذا لتكوين مصادقة الواجهة الخلفية (إنشاء رمز مميز لكل مستخدم وحماية المسارات).

ضع في اعتبارك أنه إذا تعثرت في أي خطوة ، فيمكنك الرجوع إلى GitHub repo .

في هذا المقال سوف أعلمك ما يلي:

  • التعامل مع الطرق المحمية
  • التعامل مع رموز JWT
  • التعامل مع الردود غير المصرح بها
  • إنشاء واجهة برمجة تطبيقات أساسية
  • إنشاء النماذج والمخططات

المقدمة

ما هو Passport.js؟

Passport عبارة عن برنامج وسيط للمصادقة لـ Node.js. نظرًا لأنه مرن للغاية ووحدات نمطية ، يمكن إسقاط Passport بشكل غير ملحوظ في أي تطبيق ويب مستند إلى Express. تدعم مجموعة شاملة من الاستراتيجيات المصادقة باستخدام اسم مستخدم وكلمة مرور و Facebook و Twitter وغير ذلك. اكتشف المزيد حول Passport هنا.

الدورة التعليمية

إنشاء خادم العقدة الخاص بنا من البداية

أنشئ دليلًا جديدًا باستخدام هذا "app.js"ملف داخل:

سنقوم بتثبيت nodemon لتسهيل التطوير.

وبعد ذلك سنقوم بتشغيل "app.js" معه.

$ nodemon app.js

إنشاء نموذج المستخدم

أنشئ مجلدًا جديدًا باسم "الطرازات" ،وأنشئ ملف "Users.js" داخل هذا المجلد.هذا هو المكان الذي سنحدد فيه "UsersSchema". نحن نذهب لاستخدام JWTو Cryptoتوليد hashو saltمن تلقى passwordسلسلة. سيتم استخدام هذا لاحقًا للتحقق من صحة المستخدم.

دعنا نضيف نموذجنا الذي تم إنشاؤه حديثًا إلى "app.js".

أضف السطر التالي إلى ملف "app.js" بعد التهيئة Mongoose:

require('./models/Users');

تكوين جواز السفر

قم بإنشاء مجلد جديد "config" مع ملف "جواز السفر. js" بداخله:

في هذا الملف ، نستخدم الطريقة validatePasswordالتي حددناها في ملفUser model. بناءً على النتيجة ، نرجع ناتجًا مختلفًا عن Passport LocalStrategy.

دعنا نربط "Passport.js" بملف "app.js" الخاص بنا. أضف السطر التالي أدناهmodels :

require('./config/passport');

الطرق وخيارات المصادقة

قم بإنشاء مجلد جديد يسمى "المسارات" مع الملف "auth.js" بداخله.

في هذا الملف ، نستخدم الوظيفة getTokenFromHeadersللحصول على رمز JWT الذي سيتم إرساله من جانب العميل في رؤوس الطلب . ونحن أيضا إنشاء authالكائن مع optionalو requiredالممتلكات. سنستخدمها لاحقًا في مساراتنا.

في نفس مجلد "المسارات" ، أنشئ ملف "index.js":

نحتاج الآن إلى مجلد "api" داخل مجلد "التوجيهات" ، مع ملف "index.js" آخر بداخله.

الآن ، لنقم بإنشاء ملف "users.js" الذي نطلبه في "api / index.js".

أولاً ، سنقوم بإنشاء مسار مصادقة اختياري‘/’ والذي سيتم استخدامه لإنشاء نموذج جديد (تسجيل).

router.post('/', auth.optional, (req, res, next) ...

بعد ذلك ، سنقوم بإنشاء مسار مصادقة اختياري آخر ‘/login’. سيتم استخدام هذا لتنشيط تكوين جواز السفر الخاص بنا والتحقق من صحة كلمة المرور المستلمة عبر البريد الإلكتروني.

router.post('/login', auth.optional, (req, res, next) ...

أخيرًا ، سننشئ مسار المصادقة المطلوب ، والذي سيتم استخدامه لإعادة المستخدم الذي قام بتسجيل الدخول حاليًا. فقط المستخدمون الذين قاموا بتسجيل الدخول (المستخدمون الذين تم إرسال رمزهم المميز بنجاح من خلال رؤوس الطلب) لديهم حق الوصول إلى هذا المسار.

router.get('/current', auth.required, (req, res, next) ...

دعنا نضيف مجلد "المسارات" إلى "app.js".أضف السطر التالي أسفل جواز سفرناrequire :

app.use(require('./routes'));

اختبار الطريق

سأستخدم ساعي البريدلإرسال الطلبات إلى خادمنا.

يقبل خادمنا الهيئة التالية:

{ "user": { "email": String, "password": String } }

إنشاء طلب POST لإنشاء مستخدم

هيئة الاختبار:

استجابة:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgxNTEsImlhdCI6MTUyNzcyNDE1MX0.4TWc1TzY6zToHx_O1Dl2I9Hf9krFTqPkNLHI5U9rn8c" } }

سنستخدم الآن هذا الرمز المميز ونضيفه إلى "الرؤوس" في تكوين Postman.

والآن لنختبر مسار المصادقة الوحيد .

إنشاء طلب GET لإعادة المستخدم المسجل حاليًا

طلب URL:

GET //localhost:8000/api/users/current

استجابة:

{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgzMTgsImlhdCI6MTUyNzcyNDMxOH0.5UnA2mpS-_puPwwxZEb4VxRGFHX6qJ_Fn3pytgGaJT0" } }

دعنا نحاول القيام بذلك بدون رمز مميز في "رؤوس".

استجابة:

النهاية

شكرا لك على الذهاب من خلال هذا البرنامج التعليمي. إذا لاحظت أي أخطاء يرجى إبلاغها لي. إذا تعثرت في أي خطوة ، فيرجى الرجوع إلى GitHub repo.

يمكنك التواصل معي من خلال:

  • erdeljac DOT أنطونيو في gmail.com
  • ينكدين

تحقق من تطبيق SwipeFeed الخاص بي.