الآن بعد أن فهمنا المصادقة المستندة إلى الرمز المميز باستخدام رموز JSON Web Tokens،
وفهمنا أيضًا مزايا استخدام هذا الأسلوب.
حقيقة أننا نقوم الآن ببناء خادم قائم على واجهة برمجة تطبيقات Rest،
في هذه الدورة يعني
أن المصادقة المستندة إلى JSON Web Token
هي الأكثر ملاءمة لهذا الخادم الذي نقوم ببنائه.
لذا، دعنا نقوم بتحديث خادم واجهة برمجة تطبيقات Rest الخاص بنا للاستفادة من رموز JSON Web Tokens في هذا التمرين.
لبدء تحديث الخادم في المحطة الطرفية الخاصة بك،
دعونا أولا تثبيت جسون ويب توكين وجواز السفر وحدة عقدة جوت.
لذلك، في موجه نوع npm، تثبيت،
جواز سفر JWT JSON Web Token وناقص حفظ.
كما ترون، أنا باستخدام جسون ويب توكين 8.3.0 وجواز السفر جوت 4.0.0 في هذه الدورة.
الآن بعد أن أكملنا التثبيت دعونا المضي قدما وتحديث الخادم السريع لدينا.
الذهاب الآن إلى التعليمات البرمجية لدينا،
دعونا إضافة في ملف اسمه
conflict.js في المجلد الجذر من مشروعنا.
الآن، هذا الملف conflict.js أنا ذاهب
لاستخدامه لتخزين بعض معلومات التكوين لخادمنا.
الآن، هذه طريقة لمركزية كل التكوين لخادمنا.
في هذا الملف conflict.js،
اسمحوا لي تصدير كائن جسون هنا.
لذلك سنقول، SecretKey،
وهذا هو المكان الذي
سأحدد المفتاح السري الذي سأستخدمه لتوقيع JSON Web Token،
واسمحوا لي أيضًا بتحديد عنوان URL Mongo هنا،
والذي سيكون عنوان URL
لخادم MongoDB المحلي 27017.
بمجرد الانتهاء من ذلك،
ثم سنذهب إلى ملف authenticate.js،
وفي ملف authenticate.js سنقوم
الآن بإنشاء استراتيجية JWT.
هذه هي استراتيجية رمز الويب JSON التي يتم توفيرها من قبل
وحدة عقدة JWT جواز سفرنا التي قمنا بتضمينها للتو، وهكذا سنقول،
جواز سفر استراتيجية العمومية generativity.strategy.
سيوفر لنا هذا
استراتيجية تستند إلى JSON Web Token لتكوين وحدة جواز السفر الخاصة بنا،
ثم استخراج JWT، والتي
سأحصل عليها أيضًا من جواز السفر JWT.
سنحتاج إلى جواز سفر JWT،
ثم سنقول «استخراج JWT».
ثم دعونا استيراد
وحدة JSON Web Token
التي قمنا بتثبيتها للتو.
مرة واحدة لدينا استيراد هذه،
دعونا المضي قدما والبدء في تكوين بعض الأشياء.
جنبا إلى جنب مع هذه، اسمحوا لي استيراد التكوين الذي قمت
بإنشاء ملف config.js الذي قمت بإضافته للتو إلى مشروعي.
بمجرد الانتهاء من هذا ثم اسمحوا لي أن المضي قدما
وتقديم بعض الوظائف الإضافية التي سوف تصدير من هنا.
سنقول، Exports.getToken،
هذه الوظيفة عند العرض بمعلمة هناك والتي سوف اتصل ببساطة بالمستخدم،
والذي سيكون كائن JSON،
سيؤدي ذلك إلى إنشاء الرمز المميز وإعطائه لنا.
لإنشاء الرمز المميز، سنستخدم وحدة jsonwebtoken التي قمنا باستيرادها للتو.
لذلك، هنا سوف نقول العودة JWT.Sign،
وهذا يساعدنا على إنشاء JSON Web Token وحتى داخل ذلك
سيسمح لي بتزويد
الحمولة والحمولة هنا تأتي كمعلمة هنا تسمى المستخدم،
ثم المعلمة الثانية هي
المفتاح السري أو الخاص الذي أحصل عليه من التكوين. المفتاح السري،
الذي قمت بتهيئته في وقت سابق قليلاً.
يمكننا توفير خيارات إضافية هنا.
أحد الخيارات التي سأقوم بتوفيرها لهذا هو
حسنا، اسمحوا لي أن انتقل إلى السطر التالي هنا،
والخيار الذي سوف توريد هو إكسيبريسين.
سيخبرك ExpireSin كم من الوقت سيكون jsonwebtoken
صالحًا حتى في هذه الحالة أقول 3،600 يعني 3،600 ثانية أو حوالي ساعة.
بعد ساعة سيكون لديك لتجديد jsonwebtoken.
ساعة طويلة بما فيه الكفاية بالنسبة لنا لتكون قادرة على اختبار طلبنا.
يمكنك تعيين هذا ليكون أطول بكثير إذا اخترت.
في تطبيق حقيقي، يمكنك تعيين هذا ليكون قيمة أطول بكثير ربما
بضعة أيام، ونتوقع من المستخدم إعادة مصادقة نفسه كل بضعة أيام.
الآن، سنقوم أيضًا بتكوين
الاستراتيجية المستندة إلى jsonwebtoken لتطبيق جواز السفر الخاص بنا.
لذلك، اسمحوا لي أن أعلن متغير يسمى opts،
والتي ليست سوى الخيارات التي أنا ذاهب لتحديد لاستراتيجية بلدي جوت القائمة.
لذلك سنقول اختيارات جوتفرومركست.
الآن يحدد هذا الخيار
كيف يجب استخراج jsonwebtoken من رسالة الطلب الواردة.
هذا هو المكان الذي سوف نستخدم استخراج JWT.
يدعم هذا المستخرج JWT أساليب مختلفة
لاستخراج المعلومات من الرأس.
سيقول من AuthHeader من AuthHeader كرمز حامل،
من رأس المخطط وما إلى ذلك.
إذا قرأت الوثائق،
فستخبرك بطرق مختلفة لاستخراج jsonwebtoken.
يمكنك تمرير الرمز المميز في نص
رسالة الطلب الواردة ومن ثم يمكنك استخراجه من هناك،
يمكنك أيضا استخدام المستخلصات المخصصة وهلم جرا.
في هذه الدورة، سأستخدم أبسط طريقة تسمى
من رأس المصادقة كرمز حامل.
نحن بالفعل
على دراية رأس المصادقة لأننا كنا نستخدم ذلك مع
المصادقة الأساسية والمصادقة المستندة إلى ملف تعريف الارتباط في وقت سابق.
لذا، سأقوم فقط باستخدام
حقل الرأس نفسه في رسالة الطلب لحمل jsonwebtoken.
لذلك سأقول اختيارات كما جسونوبتوكين رمزية حامل.
التالي الذي سنقول Opts.SecretorKey،
هذه هي المعلمة الثانية التي تساعدني على
توفير المفتاح السري الذي سأستخدمه ضمن استراتيجيتي لتسجيل الدخول.
لذلك هذا هو الخيار الآخر الذي سأقوم بتحديده هنا.
مرة واحدة أنا تحديد هذين،
اسمحوا لي تصدير استراتيجية جواز السفر
التي أنا ذاهب لتكوين هنا لذلك سنقول ExportJWTPassport،
ثم سنقول passport.use.
تذكر الطريقة التي حددت بها الاستراتيجية المحلية في وقت سابق.
نحن هنا نحدد الاستراتيجية القائمة على JWT،
ثم سننشئ استراتيجية JWT جديدة،
ونذكر أننا استوردنا للتو استراتيجية JWT
هنا وهذا هو ما سنستخدمه لإنشاء استراتيجية جديدة.
تأخذ استراتيجية JWT هذه
كائن الخيارات الذي قمت بإنشائه للتو كمعلمة أولى.
خيارات الاستراتيجية والثانية هي وظيفة التحقق التي أحتاج إلى توفيرها،
وبالتالي فإن وظيفة التحقق سأقوم بتزويدها في السطر التالي هنا،
سنقول FunctionJWT_Payload.
انتهيت لذلك، عندما يتم استدعاء هذه الوظيفة،
يتم القيام به هو رد الاتصال الذي يتم توفيره من قبل جواز السفر.
لذلك، كلما كان لديك جواز سفر تقوم بتكوين مع استراتيجية جديدة،
تحتاج إلى توفير المعلمة الثانية القيام به.
من خلال هذه المعلمة المنجزة،
سوف تقوم بتمرير المعلومات إلى جواز السفر الذي
ستستخدمه بعد ذلك لتحميل الأشياء على رسالة الطلب.
لذلك، عندما يوزع جواز السفر رسالة الطلب،
فإنه سيستخدم الاستراتيجية ثم استخراج المعلومات،
ومن ثم تحميله على رسالة طلبنا.
لذلك، بما أن هذا يحدث أن تكون وظيفة،
وأنا مجرد الذهاب إلى استخدام وظيفة السهم هنا،
لقد حصلت مولعا وظائف الأسهم.
لذلك، اسمحوا لي أن خلق ذلك كوظيفة السهم هنا،
وداخل هذه الوظيفة،
ونحن سوف تحدد وظيفة.
لذا، ماذا نفعل داخل الوظيفة؟
اسمحوا لي أن أفعل console.log من
حمولة JWT ثم
اسمحوا لي فقط تسجيل الخروج من الخيار القادم هنا،
خيار حمولة JWT القادمة هنا،
بحيث يمكنك أن ترى ما هو داخل حمولة JWT.
ثم، سوف نبحث عن مستخدم عن طريق قول user.Findone،
ثم أعرف أنه في jwt.payload،
هناك حقل معرف الذي يأتي في.
لذلك، هذا هو ما سأقوم بتعيينه كحقل معرف هنا.
لذلك، سأقول، user.Findone والثاني
هو وظيفة رد الاتصال.
كما تدرك، هذا المستخدم طريقة النمس ومحاولة العثور عليها.
لذلك، سنقول إذا أخطأت ثم، العودة القيام به.
ماذا فعل هذا؟ هذا هو رد الاتصال أن
جواز السفر سوف تمر في استراتيجيتك هنا.
لذلك، نحن ذاهبون إلى أن ندعو هذه الوظيفة القيام به.
هذا القيام به في جواز السفر يأخذ ثلاث معلمات.
لذلك، يمكنك أن ترى ثلاث قطع من المعلومات هذا القيام به يتوقع أنه يقول، خطأ: أي.
لذلك، إذا كان لديك خطأ، فستمرره كمعلمة أولى.
المعلمة الثانية، المستخدم؟ ،
إذا كان المستخدم موجودًا،
فسيتم تمرير قيمة المستخدم ثم إذا كانت هناك أي معلومات؟ :, أي.
لذا، فإن هذين معلمتين اختياريتين وهكذا،
إذا قمت بتمرير أي معلومات،
فسيتم استخدام ذلك داخل التطبيق.
إذا قمت بتمرير false كمعلمة ثانية،
فهذا يعني أن المستخدم غير موجود أو ذلك.
لذلك، سوف يفسر أن المستخدم غير موجود.
لذا، يمكنني القول، خطأ،
خطأ، لأن هذا خطأ.
لذلك، أنا لن تمر في قيمة المستخدم هناك،
أنا فقط ذاهب لتمرير في false.
هناك، التالي،
يمكننا أن نقول، آخر إذا (المستخدم).
لذلك، إذا لم يكن المستخدم فارغًا،
فسنقول العودة (خالية).
لا يوجد خطأ لذلك، ستكون المعلمة الأولى
فارغة والمعلمة الثانية هي المستخدم،
لكننا وصلنا للتو من MongoDB.
خلاف ذلك، سوف نعود
القيام به مع فارغة، كاذبة.
لذلك، في الحالة الأخيرة،
لم نتمكن من العثور على المستخدم،
لذلك نحن ذاهبون إلى أن تمر في كاذبة.
لذلك، نحن ذاهبون إلى التعامل مع الأمر مثل هذا.
إذا كنت تريد، يمكنك إنشاء حساب مستخدم جديد في هذه المرحلة
ولكن أنا ذاهب للحفاظ على هذا بسيط فقط بحيث أنه من السهل بالنسبة لنا أن نفهم.
لذا، نحن سَنَقُولُ فقط، لاغية، كاذبة. هذه ستّة
لذا، هذه هي استراتيجية جواز سفر JsonWebToken التي قمت بتهيئتها هنا للتو.
أيضا، اسمحوا لي تصدير
وظيفة واحدة أخرى من هنا تسمى فيريفيوسر.
الآن، هذه الوظيفة فيريفيوسر،
وأنا ذاهب لاستخدامه للتحقق من مستخدم وارد.
لذا، هذا هو المكان الذي سأستخدم فيه passport.authenticate.
لذا، فإن passport.authenticate، فإن الاستراتيجية هي استراتيجية jwt التي قمت بتهيئتها للتو،
واستراتيجية JsonWebToken التي قمت بتكوين للتو.
ثم، الجزء الثاني،
أود أن أقول، جلسة: كاذبة.
لذا، هذا يعني
أننا لن نخلق جلسات في هذه الحالة.
كما تتذكر، تطبيق معكوس،
نحن نستخدم المصادقة المستندة إلى الرمز المميز.
لذلك نحن لن نكون خلق جلسات.
لذلك، لهذا السبب قمت بتعيين جلسة الخيار هذه إلى false هنا
، وبالطبع، حدد أول واحد الاستراتيجية التي سأستخدمها.
لذلك، للتحقق من مستخدم،
وسوف تستخدم استراتيجية جوت.
كيف تعمل استراتيجية JWT؟
في الطلب الوارد،
سيتم تضمين الرمز المميز في رأس المصادقة كما رأينا هنا.
قلنا رأس المصادقة كرمز حامل.
إذا تم تضمين ذلك، فسيتم استخراجه وسيتم
استخدامه لمصادقة المستخدم استنادًا إلى الرمز المميز.
تصحيح طفيف هنا، يجب أن يكون هذا المستخدم. findone_id يساوي jwt_payload. _id،
لأن هذه هي قيمة المعرف الموجودة داخل حمولة JsonWebToken الخاصة بي.
لذلك، نحن نبحث عن المستخدم مع هذا المعرف المعطى.
لذلك، بمجرد الانتهاء من هذا، ثم الآن،
الجزء الثاني الذي نحتاج إلى القيام به هو أننا بحاجة إلى إنشاء الرمز المميز في مكان ما.
الآن، أين نقوم بإنشاء الرمز المميز؟
لذلك، هذا هو المكان الذي نقوم به في ملف users.js مفيد جدا بالنسبة لنا.
في ملف users.js،
تذكر أن لديك بالفعل نقطة النهاية هذه تسمى تسجيل الدخول.
في نقطة نهاية تسجيل الدخول،
كنت تستخدم اسم المستخدم وكلمة المرور لمصادقة المستخدم.
لذلك، حتى مع JsonWebToken لإصدار JsonWebToken،
تحتاج أولاً إلى مصادقة المستخدم باستخدام إحدى الاستراتيجيات الأخرى،
وإذا كنت ستستخدم الاستراتيجية المحلية أولاً،
فسوف نقوم بمصادقة المستخدم باستخدام اسم المستخدم وكلمة المرور.
بمجرد مصادقة المستخدم باستخدام اسم المستخدم وكلمة المرور،
سنصدر الرمز المميز للمستخدم قائلا:
«حسنًا، أنت مستخدم صالح،
سأعطيك الرمز المميز».
ستحمل جميع الطلبات اللاحقة الرمز المميز
في رأس رسالة الطلب الواردة.
لذلك، في وقت سابق، اعتدنا على إنشاء جلسات.
عندما تتم مصادقة المستخدم،
لن نستخدم الجلسات بعد الآن.
بدلاً من ذلك، عندما تتم مصادقة المستخدم باستخدام الاستراتيجية المحلية،
سنصدر رمزًا مميزًا للمستخدم.
لذا، داخل هذه الطريقة router.post التي قمنا بها على نقطة النهاية ذلك/تسجيل الدخول،
سأقوم بإنشاء رمز مميز وتمرير هذا الرمز المميز مرة أخرى إلى المستخدم.
لذلك، هنا، سوف نقول جهاز التوجيه.
اسمحوا لي أن إنشاء رمز مميز.
لإنشاء رمز مميز،
لدينا هذه الوظيفة في وحدة المصادقة تسمى Authenticate.getToken.
لذا, أذكر, أن لدينا بالفعل,
للاستفادة من ذلك بالطبع,
حتى قبل أن نبدأ هناك,
أنا بحاجة إلى استيراد المصادقة.
الوحدة هنا لذلك، سنقول مصادقة تتطلب. /المصادقة.
لذا، عندما تكون في التعليمات البرمجية هنا،
يمكننا الآن أن نقول Authenticate.getToken،
و getToken يأخذ المعلمة هنا.
الآن، أذكر، والعودة ملف authenticate.js.
يأخذ ملف authenticate.js معلمة واحدة هنا
والتي سيتم استخدامها كحمولة عند إنشاء JsonWebToken.
لذلك، في ملف users.js،
سأقوم بإنشاء رمز مميز عن طريق إعطاء حمولة،
والتي تحتوي فقط على معرف المستخدم.
لذلك، سنقول معرف: req.user.
هذا يكفي لإنشاء JsonWebToken.
لا نريد تضمين أي معلومات أخرى للمستخدم.
إذا اخترت ذلك، يمكنك تضمين أجزاء أخرى من معلومات المستخدم،
ولكن أود أن أقترح أن تبقي JsonWebToken صغيرة.
معرف المستخدم يكفي بما فيه الكفاية لأنه إذا كنت بحاجة إلى البحث عن المستخدم،
فإن معرف المستخدم يكفي للبحث في MongoDB للمستخدم.
لذلك، أنا فقط ذاهب إلى ترميز فقط معرف المستخدم هنا.
الآن، أنت تعرف أن req.user سيكون موجودًا بالفعل،
لأنه عندما يقوم passport.authenticate ('local') بمصادقة المستخدم بنجاح،
سيؤدي ذلك إلى تحميل خاصية المستخدم على رسالة الطلب.
لذلك، هذا هو السبب في أنني قادرة على القيام بذلك هنا.
لذلك، هذا هو ما سأستخدمه لإنشاء الرمز المميز.
الآن، بمجرد إنشاء الرمز المميز،
أريد تمرير هذا الرمز المميز مرة أخرى إلى المستخدم.
لذلك، في كائن rest.json الذي أقوم بتوفيره هنا،
أنا بالفعل تحمل العلم الحقيقي النجاح وأيضا،
رسالة حالة هنا.
اسمحوا لي أن أضيف في الرمز المميز
كواحدة من الخصائص في رسالة الرد هنا.
لذا، فإن الرمز المميز الذي قمت بإنشائه للتو،
سأقوم بتمرير هذا مرة أخرى كخاصية ثانية داخل سلسلة Json هذه هنا.
حتى الآن، عندما يتلقى موكلي سلسلة Json هذه في نص رسالة الرد،
يمكنه الدخول واستخراج الرمز المميز من هناك.
هذا كل شيء لذلك، قمنا الآن بتحديث ملف users.js،
ويمكنك الآن أن ترى كيف سيتم
إنشاء الرمز المميز وإرساله مرة أخرى إلى المستخدم عند مصادقة المستخدم بنجاح.
الآن، يمكن استخدام هذا النظام أيضًا
عند استخدام مصادقة الجهات الخارجية مثل استنادًا إلى OAuth 2.0،
والتي سنقوم بفحصها في الوحدة التالية.
الآن، سيكون الإجراء مشابهًا.
ستقوم بإنشاء رمز مميز عندما تتم مصادقة المستخدم من قبل موفر مصادقة
الجهة الخارجية أو موفر مصادقة OAuth،
ثم ستقوم بتمرير الرمز المميز مرة أخرى إلى المستخدم،
في نهج مماثل كما ترى هنا.
الآن، مرة واحدة قمنا بذلك،
ثم نذهب إلى ملف app.js.
في ملف app.js، لأننا قمنا بتضمين ملف تهيئة هنا.
لذا، دعني أطلب ملف التكوين هنا،
ثم عنوان URL الذي أستخدمه هنا بدلاً من ترميز عنوان URL هذا،
سأقول Config.Mongourl.
لذلك، الآن، ترى كيف يمكن استخدام ملف config.js الخاص بي
كمكان مركزي حيث يمكنني إعداد التكوين للتطبيق الخاص بي.
هذا كل شيء لذا، ما يحدث الآن هو أنه عندما
يقوم المستخدم بالمصادقة على نقطة النهاية /تسجيل الدخول ويتم مصادقة المستخدم بنجاح،
فسيتم إنشاء الرمز المميز بواسطة الخادم وإرساله مرة أخرى إلى العميل أو المستخدم.
لذلك، سيقوم العميل بتضمين الرمز المميز في
كل طلب وارد لاحق في رأس التفويض.
الآن، كيف يتضمن رأس التفويض؟
دعونا نعود إلى authentic.js وهنا،
ترى أننا قلنا Extractjwt.FromauthheaderasbearerToken هنا.
لذلك، سيتم تضمين هذا في رأس المصادقة كرمز مميز لحاملها.
سأريك كيف يتم ذلك،
ثم نستخدم ساعي البريد لتضمين الرمز المميز لحامله في رأس المصادقة.
الآن، عندما يأتي هذا،
فأنت تتذكر أنه أسفل هنا،
قمت بتكوين هذه الطريقة هنا تسمى VerifyUser،
والتي تستدعي مصادقة جواز السفر مع JWT.
لذلك، يستخدم هذا الرمز المميز الذي
يأتي في رأس المصادقة ثم يتحقق من المستخدم.
لذلك، في أي وقت أريد التحقق من صحة المستخدم،
يمكنني ببساطة استدعاء التحقق من المستخدم،
والتي ستبدأ المكالمة إلى passport.authenticate والتحقق من سر. و
إذا كان هذا ناجحا,
فسيسمح لي بالمضي قدما.
هذا الإجراء مشابه جدا لما قمت به في
ملف users.js حيث يمكنك استدعاء نفس passport.authenticate ('المحلية').
لذلك، إذا كان هذا ناجحا،
ثم المضي قدما.
إذا فشلت، ستقوم وظيفة المصادقة بإرجاع رسالة الخطأ
مرة أخرى إلى العميل قائلا أن المستخدم غير مصرح به.
لذلك، هذا هو بالفعل اتخذت الرعاية.
حتى الآن، بعد أن قمنا بتضمين هذا في ملف authenticate.js الخاص بي،
أي مكان أريد التحقق من المستخدم،
يمكنني ببساطة استدعاء
هذه الوظيفة فيريفيوسر
التي حددتها هنا أو التصدير الذي حددته هنا،
والتي سنقوم باستدعاء passport.authenticate باستخدام
استراتيجية JWT لمصادقة المستخدم.
الآن، كيف نستفيد من هذا؟
الآن، ما سنفعله هو الذهاب إلى كل واحد من أجهزة التوجيه لدينا،
والتحكم في الخيارات على جميع الطرق التي نريد السيطرة عليها.
لذا، بالعودة إلى ملف app.js، الآن،
أننا لا نستخدم جلسات سأقوم بإزالة هذه الجلسة من هنا،
لأننا لم نعد نستخدم الجلسات.
وبالمثل، أنا ذاهب لإزالة هذا passport.session من هنا أيضا.
و هذا أيضا لا حاجة إليه.
أيضا، هذه المصادقة، انظر سابقا،
عندما قمت بتكوين هذه المصادقة،
تم تطبيق هذه المصادقة على كل طلب وارد واحد.
الآن، سأقوم بتغيير طلبي،
حيث سأحتاج إلى المصادقة فقط على طرق معينة وليس على جميع الطرق.
لذلك، اسمحوا لي إزالة هذه المصادقة تماما من app.js.
لذلك، الآن، عندما يأتي الطلب،
إذا كان على/ نقطة النهاية،
سيتم تقديم الفهرس.
إذا كان على/المستخدمين نقطة النهاية، فسيسمح لك بالانتقال إلى
المسارات المختلفة التي يتم تثبيتها على/المستخدمين في users.js،
ثم بعد ذلك، بقية منها.
ما سأفعله الآن هو أنني سأترك
المجلد العام مفتوحاً لأي شخص ليدخل إليه
الآن، في العديد من التطبيقات،
قد يكون هذا على ما يرام.
لذا، سأترك هذا مفتوحاً
الآن، على الأطباق،
والترقيات، ونقطة نهاية القادة،
كل طلبات الحصول على.
سأسمح بالرد عليها دون الحاجة إلى أي مصادقة.
الآن لماذا أريد أن أفعل ذلك؟
إذا كان المستخدم يقوم بطلب الحصول
على، يريد المستخدم فقط استرداد المعلومات.
لذلك، على سبيل المثال، على جانب العميل إذا كنت أقوم بتنفيذ تطبيق ويب باستخدام Angular
أو تطبيق عميل باستخدام برنامج أيوني أو نصي
أصلي، فربما أرغب في تنفيذ تطبيقي
بطريقة تعرض الصفحة الرئيسية المعلومات بالفعل،
والمعلومات الجينية التي تريد متاحًا لأي شخص
يزور موقعك الإلكتروني أو يفتح تطبيقك.
لذلك، يمكن عرض المعلومات الأساسية هناك.
ولكن إذا كنت ترغب في تغيير أي شيء،
فأنت تتوقع مصادقة المستخدم.
لذلك، سوف تسمح عمليات بوست، ووضع العمليات،
وحذف العمليات التي يتعين القيام بها فقط من قبل المستخدمين المصادق عليهم.
وبالمثل، بالنسبة للتعليقات على سبيل المثال،
يمكنك القول أنه يمكن نشر التعليقات أو تعديلها فقط من قبل المستخدمين المصادق عليهم.
لذلك، يمكنك تقييد بعض المسارات فقط للمستخدمين المصادق عليهم،
المسار الآخر الذي يمكنك تركه مفتوحًا. كيف نفعل ذلك؟
الآن هذا هو المكان الذي تحقق المستخدم الذي
قمنا بتصديره من ملف authenticate.js يأتي في متناول اليدين.
الآن بدلا من السيطرة على جميع نقاط النهاية،
وجميع العمليات المختلفة على الأطباق، والترقيات،
والقادة في النقاط،
ونحن سوف تفتح فقط الحصول على عمليات لأي شخص،
ولكن وظيفة، ووضع،
وحذف العمليات سوف تقتصر فقط على المستخدمين المصادق عليهم.
في المهمة، ستضيف فئة واحدة أخرى من المستخدمين تسمى مستخدمي المشرف.
الآن يمكنك تقييد عمليات معينة ليتم تنفيذها فقط من قبل مستخدمي المشرف.
لذلك، على سبيل المثال، تعديل الأطباق
أو حذف معلومات الأطباق من قاعدة البيانات،
وسوف يقتصر فقط على المستخدمين المشرف.
ولكن يمكن للمستخدمين الأساسيين نشر التعليقات،
وتعديل التعليقات التي
نشرتها، وربما حتى حفظ بعض الأطباق المفضلة.
سنفعل ذلك الجزء في الوحدة الرابعة
الآن كيف يمكننا التحكم في طرق محددة؟
لذلك هذا هو المكان الذي يجب أن نذهب إلى كل من أجهزة التوجيه
ومن ثم استيراد الضوابط على مسارات محددة.
لذلك، دعونا نبدأ مع الطريق الأطباق.
لذلك، بالنسبة لمسار الأطباق،
عليك أن تتذكر أنه يتم التحكم في هذا في ملف dishRouter.js.
لذلك، انتقل إلى dishRouter.js،
دعونا أولا استيراد المصادقة هنا.
لذلك سنقول، مصادقة const
تتطلب.. /المصادقة لأن
هذا الملف authenticator.js في مجلد المستوى الأعلى.
لذلك، تذكر../المصادقة هنا.
لذلك، بمجرد استيراد المصادقة،
لمسار جهاز التوجيه الطبق لهذا الطريق،
عملية الحصول على، وأنا ذاهب للسماح دون أي مشكلة.
إذن، هذا مفتوح
لذلك أنا لن أفرض أي قيود.
من المشاركة، إذا أردنا تطبيق برامج وسيطة متعددة،
يمكننا ببساطة إضافة الرئيسي داخل هذا واحد وراء الآخر.
الآن عندما يتم استدعاء المشاركة،
الآن أنت ببساطة تنفيذ هذه الوظيفة هنا.
الآن قبل ذلك،
يمكنني الذهاب في ويقول، authenticate.VerifyUser، هناك.
إذاً، ماذا يفعل هذا؟
هذا يقول أنه إذا جاء طلب آخر في،
وأود أولا تنفيذ هذا الوسيطة،
التي قمت بتصديرها من ملف authentic.js،
وأنا أولا تطبيق ذلك،
وهو ما يعادل القول جواز سفر مصادقة JWT وكنت التحقق من المستخدم.
ثم إذا كان هذا ناجحا،
ثم سوف ننتقل إلى القيام بقية منه.
إذا فشلت المصادقة في هذه المرحلة،
فسيرد مصادقة جواز السفر
مرة أخرى إلى العميل مع رسالة الخطأ المناسبة.
لذلك يتم التعامل معها بالفعل عن طريق مصادقة جواز السفر،
لذلك لا داعي للقلق أي شيء أبعد من تلك النقطة.
إذا كنت قد عبرت هذه البرامج الوسيطة ثم الحصول على
تنفيذ الوظيفة التالية التي تعني أن المصادقة الخاصة بي كانت ناجحة،
لذلك أنا قادرة على المضي قدما من هذه النقطة.
لذلك، هذا هو بمثابة حاجز لهذه الطريقة المشاركة.
الآن باستخدام نفس الحجة،
يمكنني ببساطة تطبيق هذه البرامج الوسيطة الخاصة على جميع الطرق الأخرى.
أستطيع أن أفعل ذلك إلى وضع.
على الرغم من أن في هذه الحالة،
وضع لن يكون القيام بأي شيء.
ولكن على أي حال،
سوف ببساطة من أجل التوحيد،
وسوف أطبق المستخدم التحقق أيضا لوضع وبطبيعة الحال،
لحذف أيضا، وأنا ذاهب لتطبيق وضع.
وبالمثل، النزول إلى/dishid،
احصل على سأسمح بذلك للعمل دون أي مشكلة.
آخر، وسوف تطبيق التحقق من المستخدم.
ضع أيضا سأطبق المستخدم التحقق وللحذف نفسه أيضا.
ل /ديشيد/التعليقات، وأنا ذاهب الى ترك الحصول على مفتوحة،
لا بأس لأي شخص لاسترداد تعليقات حول طبق معين.
بعد ذلك، سأقوم بإغلاق هذا،
لذلك يمكن للمستخدمين الذين تم التحقق منهم فقط نشر التعليقات.
وضع أيضا سوف أغلق هذا قبالة وحذف أيضا.
عليك أن تذهب خطوة أخرى إلى الأمام وتقول،
«فقط المستخدمين الذين قاموا بنشر التعليق يمكنهم حذف مشاركاتهم الخاصة».
لكننا سنفعل ذلك في الوحدة التالية.
في الوقت الحالي، سأقول،
«حسنًا، يمكن لمستخدم تم التحقق منه حذف أي تعليق».
هذا بالطبع غير صحيح،
يمكننا وضع شيكات إضافية،
لكننا سنفعل ذلك في الوحدة التالية من هذه الدورة.
لذلك، لحذف أيضا أنا تطبيق نفسه.
مرة أخرى، لتعليقات/تعليقات جهاز التوجيه الطبق ID،
احصل على سأتركه مفتوحًا.
بعد ذلك، سأتركه مغلقاً
ضع أيضًا إغلاقه ثم لحذفه أيضًا سأقوم بإغلاق هذا.
حذف بالطبع كما قلت،
يجب السماح لعملية الحذف فقط المستخدم الذي
أنشأ التعليق يجب أن يطلب حذف ذلك،
ولكن تحتاج إلى إعداد بعض الأشياء الإضافية لذلك للعمل بشكل صحيح،
والتي سنفعل في الوحدة التالية.
في الوقت الحالي، نقول أن المستخدم الذي تم التحقق منه يمكنه حذف تعليق محدد، هذا كل شيء.
الآن سوف نطبق نفس المبدأ على جهاز التوجيه الترويجي وأيضا جهاز التوجيه الزعيم.
لذلك، الذهاب إلى جهاز التوجيه الترويجي،
اسمحوا لي استيراد المصادقة
ومن ثم الحصول على مفتوحة،
لذلك هذا هو جهاز التوجيه زعيم.
لذا، الحصول على مفتوحة.
آخر, أنا ذاهب للسيطرة على ذلك,
وضع, السيطرة, حذف, التحكم,
قائد جهاز التوجيه, زعيم ID,
الحصول على ما يرام, آخر,
تسيطر, وضع يتم التحكم و حذف يتم التحكم.
نفس الشيء مع جهاز التوجيه الترويجي.
اسمحوا لي، تتطلب مصادقة
ومن ثم للحصول على الطريق مفتوح، يتم التحكم في
POST، يتم التحكم في وضع، يتم التحكم في
حذف، نفس الشيء لpromorouter/promoid.
الحصول على مفتوح، يتم التحكم في POST،
ووضع وحذف يتم التحكم أيضا، هذا كل شيء.
دعونا حفظ جميع التغييرات.
لذلك، بمجرد إكمال جميع التغييرات،
دعونا حفظ التغييرات.
الآن، طلبنا جاهز للاختبار.
لذلك، دعونا نذهب وإعادة تشغيل الخادم لدينا،
أو إذا كان الخادم لا يعمل،
سنقوم فقط بدء تشغيل الخادم.
الذهاب إلى المحطة،
الخادم الخاص بي لا يعمل.
لذلك، اسمحوا لي أن أبدأ الخادم عن طريق كتابة بداية npm.
ومن المثير للاهتمام، أنه مجرد إلقاء خطأ هنا،
أردت فقط أن أوضح لك أنه حتى أنا يمكن أن يخطئ،
لذلك سترى أن هناك خطأ هنا يقول،
«لا يمكن العثور على module.authenticate»، وبعد ذلك إذا نظرت من خلال التعليمات البرمجية،
أجد أن هذه المشكلة حدثت في،
أين حدث ذلك؟
لذلك، أنا فقط البحث هنا،
ثم في مكان ما هنا،
لاحظت أن هذه المشكلة حدثت داخل ملف users.js الخاص بي.
لذلك، هناك حق، كما يقول،
هذا هو في ملف users.js.
لذلك، والذهاب إلى ملف users.js، دعونا إصلاح ذلك.
الذهاب إلى ملف users.js،
مباشرة في الجزء العلوي عندما طلبت المصادقة، قلت،
«.authenticate»، وكما كنت أقول لك،
يجب أن يكون نقطة نقطة لأنه في المجلد العلوي.
هذا الملف users.js في مجلد المسارات،
والمصادقة في مجلد Projects Route لذلك يجب أن يكون هذا نقطة المصادقة.
لذا، إذا ارتكبت أخطاء، ها أنت ذا،
هذه هي الطريقة التي سيتم تذكيرك بها بالخطأ الذي قدمتموه.
لذلك، دعونا حفظ التغييرات ثم إعادة تشغيل الخادم لدينا.
مرة أخرى، والعودة إلى هذا الجهاز،
اسمحوا لي أن أبدأ الخادم بلدي والخادم الخاص بي هو الآن قيد التشغيل،
دعونا نذهب إلى ساعي البريد ومن ثم اختبار التطبيق لدينا.
الآن، في ساعي البريد، اسمحوا لي أولا محاولة للقيام
جيت على لوكالهوست: 3000/أطباق وبعد ذلك عندما أفعل جيت،
فإنه ناجح لأنه لا يتم التحكم في نقطة نهاية جيت.
حتى أتمكن من القيام GET على الأطباق،
يمكنني أن أفعل GET على الترقيات،
وكل شيء يعمل على ما يرام.
ولكن إذا حاولت القيام POST على الأطباق،
لذلك اسمحوا لي أن أجد المكان الذي قمت به POST على الأطباق.
هنا لقد فعلت POST على الأطباق.
لذلك، عندما حاولت أن تفعل بوست على الأطباق،
فإنه يقول على الفور غير مصرح به.
لذلك أدركت وحدة جواز السفر الخاصة بي أنني غير مأذون لذلك أنا غير مسموح لي بالقيام بذلك،
لذلك هذا ما يذكرني به.
اسمحوا لي أن تنظيف ملفات تعريف الارتباط من،
في حالة العثور على ملف تعريف ارتباط في ساعي البريد الخاص بك فقط قم بإزالة ملف تعريف الارتباط
المطابق للمضيف المحلي لأن
ملف تعريف الارتباط هذا لم يعد مطلوبًا ولن يكون مطلوبًا.
لذلك، حتى لو قمت بإزالة ملف تعريف الارتباط ثم POST،
فإنه سيظل يقول غير مصرح به.
لذا، أنا لست مخوّلاً للقيام بهذه العمليات
لذلك، لا بد لي من تسجيل الدخول.
الآن، إذا كنت قد فعلت التمرين السابق،
كنت قد تركت المستخدم الذي قمت بالتسجيل في وقت سابق.
لذلك، على سبيل المثال، كنت قد وقعت هذا المستخدم معين في التمرين السابق،
واسمحوا لي أن أحاول تسجيل نفس المستخدم مرة أخرى
ويجب أن يشكو الخادم الخاص بي قائلا UserExistSerror بحيث يعني أن المستخدم موجود،
لذلك أنا لست بحاجة إلى الاشتراك مرة أخرى.
إذا قمت بحذف المستخدم من MongoDB الخاص بك،
فما عليك سوى تسجيل ذلك المستخدم مرة أخرى ثم دعنا ندخل.
لذلك، سوف نرسل طلب تسجيل الدخول إلى نقطة النهاية هذه.
لذلك، عندما أرسل طلب تسجيل الدخول عن طريق إجراء POST إلى المستخدم النهائي،
لاحظ ما يتم إرجاعه بواسطة الخادم الخاص بي.
لاحظت على الفور أنه في رسالة الرد
جنبا إلى جنب مع علامة النجاح ورسالة الحالة،
يمكنك أيضا الحصول على رمز هنا.
الآن، هذا الرمز المميز،
أحتاج إلى نسخ هذا الرمز المميز،
لأنه في طلباتي اللاحقة،
سأحتاج إلى تضمين هذا الرمز المميز.
لذلك، اسمحوا لي أن أذهب إلى النسخة الأولية من هذا وأنني ذاهب لنسخ هذا الرمز المميز.
هذا الرمز المميز ليس سوى سلسلة طويلة هناك،
لذلك اسمحوا لي بنسخ هذا الرمز المميز.
ثم الآن إذا كنت تشعر بالفضول حول ما هو موجود في هذا الرمز المميز،
يمكن فحص رمز JSON Web Token.
هناك موقع معين حيث يمكنك الدخول والكتابة
في JSON Web Token الخاص بك ثم تحقق بالفعل ما هو داخل JSON Web Token.
لنفعل ذلك كخطوة تالية
في نافذة المتصفح،
فقط اكتب jwt.io وهذا سوف يأخذك إلى هذا الموقع يسمى JSON Web Token jwt.io.
إذا كنت تتذكر، في المحاضرة،
كنت قد عرضت لك بنية JSON Web Token
وأظهرت لك أن رمز JSON Web Token يحتوي على ثلاثة أجزاء: الرأس
والحمولة والمعلومات هناك.
الآن، في هذه الحالة،
المعلومات موجودة هنا لذا سأقوم
بلصق رمز JSON Web Token الخاص بي في هذا الجانب الأيسر،
لذا دعني أختار ذلك ثم قم بلصق JSON Web Token الخاص بي
في الجانب الأيسر في الجزء المشفر ثم على الجانب الأيمن،
يظهر لك بالضبط ما هو داخل رمز ويب JSON الذي قمت بإنشائه للتو.
لذلك، تقول أن الرأس يحتوي على هاتين القطعتين من المعلومات.
إشعار الحمولة أنه يحتوي على معرف
المستخدم ثم التوقيع في الجزء السفلي هنا.
لذا، هذا هو ما يرد داخل رمز JSON Web Token الخاص بي.
العودة إلى ساعي البريد،
اسمحوا لي الآن محاولة للحصول على الأطباق.
لذلك، عندما أقول GET localhost: 3000/days،
فإنه لا يزال يعرض سلسلة فارغة،
صفيف فارغ هنا لأن قاعدة البيانات الخاصة بي لا تحتوي عليها.
لذلك، اسمحوا لي POST طبق إلى قاعدة البيانات الخاصة بي.
لذلك، أنا ذاهب لاختيار عملية بوست وفي الجسم،
ترى أن لدي طبق بلدي هنا.
في الرأس، سأقوم بإضافة رأس جديد يسمى
التفويض وتذكر أنه في وقت سابق للحصول على إذن أساسي،
قلت أساسي ثم كان لديك سلسلة ترميز Base 64 هناك.
إذا كنت ترغب في تضمين رمز JSON Web Token الخاص بك في رأس التفويض،
لأنه في شفرتنا،
قلنا التفويض كرمز حامل.
لذا، إذا كنت ترغب في تضمين الرمز المميز في رأس التفويض،
فسنقول حامل في التفويض ثم سنقوم بلصق
سلسلة الرمز المميز التي قمنا بنسخها للتو من طلبنا الوارد.
لذلك، سنقوم بلصق سلسلة الرمز المميز هناك.
لذا، هذا هو ما سيتم
تضمينه في رأس التفويض الخاص بطلبي الصادر هنا،
طلب POST الصادر هنا.
لذا لاحظ أن الجانب الأيسر يقول حامل والجانب الأيمن هو السلسلة،
الرمز المميز الذي قمت بنسخه للتو من
النقطة التي قمت بتسجيل الدخول فيها ثم دعني أرسل رسالة POST
الآن وأصبح POST ناجحًا الآن ويتم نشر هذا إلى قاعدة البيانات الخاصة بي.
الآن، إذا كنت تريد التأكد من أنه قد تم نشره،
دعونا نفعل GET وعندما تفعل GET،
يمكنك أن ترى أنه في الواقع تم إدراج هذا الطبق في قاعدة البيانات الخاصة بي كما هو موضح هنا.
لذا، هذه هي الطريقة التي ستستفيد بها من رموز JSON Web Tokens في التطبيق الخاص بك.
لذلك، كلما كنت بحاجة إلى إجراء
عملية POST أو PUT أو DELETE على أي من نقاط النهاية،
فستضمين.
لذا، دعني أعود إلى طلب POST هذا هنا.
في الرأس، ستضع
حقل التفويض هذا ثم يتم تضمينه في التفويض،
وستبدأ تشغيله بحامل ثم سلسلة الرمز المميز،
بعد مساحة الحامل،
ومساحة واحدة ثم سلسلة الرمز المميز التالية.
لذا، هذه هي الطريقة التي
ستحمل بها رسائل الطلب رمز JSON Web Token في رأس رسالة الطلب الصادرة.
يمكنك أيضًا تضمين الرمز المميز في نص رسالة الطلب الصادرة.
الآن، لذلك، سيكون عليك تكوين
الخادم السريع الخاص بك خاصة JWT الإضافي في
ملف authenticate.js لقبوله من
الجسم حتى تتذكر أن هناك رأينا أن
JWT الإضافي يدعم العديد من الطرق المختلفة لاستخراج
JSON Web Token من الطلب.
لذلك، هناك تحتاج إلى تحديد،
إذا كنت تريد أن تدرج في الجسم،
تحتاج إلى تحديد تلك المعلومات هناك.
الآن، تفاصيل كيفية القيام بذلك يمكنك استشارة
وثائق وحدة Passport JWT لفهم كيفية القيام بذلك.
في هذه الدورة، سأقوم ببساطة باستخدام ذلك في رأس التفويض
كما أظهرت هنا وهذا يعمل على ما يرام لمعظم الحالات.
الآن، إذا كنت تقوم بتطوير تطبيق ويب أو
تطبيق Angular أو تطبيق Ionic أو NativeScript،
فستحتاج إلى أن تكون قادرًا على تكوين
هذا التطبيق حيث سيتم تضمين JSON Web Token في رأس التفويض.
في الدرس الأخير من هذه الدورة،
وسوف تظهر لك كيفية دمج العميل والخادم،
العميل الذي قمت بتطويره في الدورات السابقة مع
الخادم الذي قمنا بتطويره في هذه الدورة.
مع هذا، نكمل هذا التمرين.
في هذا التمرين، رأينا كيف
يمكننا تكوين تطبيقنا لاستخدام رموز JSON Web Tokens،
ورأينا كيف نتعامل مع مصادقة المستخدم باستخدام JSON Web Token،
باستخدام الدعم من وحدة Passport ووحدة Passport JWT،
ووحدات JSON Web Token Node.
مع هذا، نكمل هذا التمرين.
هذا هو الوقت المناسب بالنسبة لك للقيام Git Commit مع الرسالة Passport JWT.