בספרית middleware ניצור קבצים עם פונקציות שנועדו לבצע פעולה מסויימת (ספציפית) ואפשר לקרוא לה מכל מקום באפליקציה.
נראה כאן דוגמה לשירות כזה, שבודק האם המשתמש מאומת
const jwt = require("jsonwebtoken"); module.exports = (req, res, next) => { try { const token = req.headers.authorization.split(" ")[1]; const decodedToken = jwt.verify(token, process.env.JWT_KEY); req.userData = { email: decodedToken.email, userId: decodedToken.userId }; next(); } catch (error) { res.status(401).json({ message: "You are not authenticated!" }); } }
יש צורך להתקין את התוסף, הוא מיצר מפתח למשתמש ועבור כל בקשה שאנחנו רוצים להגן עליה, אנחנו שולחים אותה לפונקציה הזו, אשר עושה בדיקה שלו מול המייל והזיהוי שלו.
במידה שיש חוסר התאמה, תעלה שגיאה וזו התשובה שתחזור מהפונקציה, אבל אם הכל תקין יופעל ה-next ויתן לבקשה להתקדם הלאה ליעד שלה.
הטוקן שנשלח מהמשתמש, נשלח ב-headers של הבקשה באופן קבוע, תחת ההדר authorization. הוא לא חייב ואתם יכולים לקבוע משהו אחר אבל נהוג לבצע את זה כך.
בנוסף, הטוקן עצמו נשלח כאשר מצורף לו בהתחלה מילה (בדרך כלל Bearer) רווח והטוקן. לכן בשורה 6 אנחנו מחלצים רק את הטוקן לפני ביצוע הבדיקה.
בשורה 7 אנחנו מחלצים את המפתח שאנחנו עשינו כבסיס לקידוד שלנו.
במקרה שלנו (בגלל שימוש ב-nodemone) הוספתי בקובץ nodemon.json את ההגדרה הבאה:
{ "env": { "JWT_KEY": "secret_this_should_be_longer" } }
המידע הזה מתווסף לפרוסס של nodejs וניתן למשוך אותו מכל מקום באפליקציה.
בעקרון אפשר להגיד שסיימנו, בחלק הקודם של הקורס ראיתם כבר איך זה מתופעל.
הנה תזכורת לשימוש של זה:
const express = require("express"); const loginController = require("../controllers/login"); const checkAuth = require("../middleware/check-auth"); const router = express.Router(); router.post("/signup", loginController.createUser); router.post("/login", loginController.userLogin); router.get("/info/:id", checkAuth, loginController.getUserInfo); module.exports = router;
שורה 3:
חיבור לפונקציה שכרגע יצרנו.
שורה 8:
בדיקת אימות לפני הפעלת פונקצית getUserInfo.
בחלק הבא נראה איך הכל מתחבר ביחד לקובץ app.js שהוא השרת שלנו.
היי
תודה על ההסבר הנפלא!!!
רק לא הבנתי מהיכן קיבלת את הקובץ nodemon.json?
לי אין אותו…
מהיכן אוכל לקבלו?
תודה רבה , אבי
היי
תודה על ההסבר הנפלא!!!
רק לא הבנתי מהיכן קיבלת את הקובץ nodemon.json?
לי אין אותו…
מהיכן אוכל לקבלו?
היי,
שמח שהפוסט עזר לך.
במידה והקובץ לא נוצר לך, אתה יכול ליצור אותו ידנית בספריית הבסיס (ROOT) .
nodemon ידע להתייחס אליה אם היא קיימת.
לא לשכוח לאתחל את השרת אחרי הוספה של הקובץ כדאי שהוא יכנס לעבודה