
תמכו בי בקריאה מהמקור המקורי: המקור המקורי
במאמר זה תלמד כיצד לטפל באימות עבור שרת הצומת שלך באמצעות Passport.js. מאמר זה אינו מכסה אימות Frontend. השתמש בזה כדי להגדיר את אימות ה- Backend שלך (צור אסימון לכל משתמש והגן על מסלולים).
זכור שאם אתה נתקע במדרגה כלשהי, אתה יכול להתייחס לריפו זה של GitHub .
במאמר זה אלמד את הדברים הבאים:
- טיפול במסלולים מוגנים
- טיפול באסימני JWT
- טיפול בתגובות לא מורשות
- יצירת ממשק API בסיסי
- יצירת מודלים וסכמות
מבוא
מהו Passport.js?
דרכון הוא תוכנת אימות עבור Node.js. מכיוון שהוא גמיש ומודולרי במיוחד, ניתן להפיל את Passport באופן בלתי פולשני לכל יישום אינטרנט מבוסס אקספרס. מערך אסטרטגיות מקיף תומך באימות באמצעות שם משתמש וסיסמה, פייסבוק, טוויטר ועוד. גלה מידע נוסף על Passport כאן.
הדרכה
יצירת שרת הצמתים שלנו מאפס
צור ספריה חדשה באמצעות "app.js" זהקובץ בפנים:
אנו נתקין נודמון לפיתוח קל יותר.
ואז נפעיל איתו את "app.js" שלנו.
$ nodemon app.js

יצירת מודל המשתמש
צור תיקיה חדשה בשם "דגמים",וצור את הקובץ "Users.js" בתוך אותה תיקייה.זה המקום בו נגדיר את "UserSchema" שלנו. אנחנו הולכים להשתמש JWT
ו Crypto
לייצר hash
ו salt
מן קבלתי password
המחרוזת. מאוחר יותר זה ישמש לאימות המשתמש.

בואו נוסיף את המודל החדש שנוצר ל- “app.js”.
הוסף את השורה הבאה לקובץ "app.js" לאחר התצורה Mongoose
:
require('./models/Users');

הגדר את הדרכון
צור תיקייה חדשה "config" עם הקובץ "passport.js" בתוכה:
בקובץ זה אנו משתמשים בשיטה validatePassword
שהגדרנו ב-User model
. בהתבסס על התוצאה, אנו מחזירים תפוקה שונה מזו של פספורט 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" } }
כעת נשתמש באסימון זה ונוסיף אותו ל"כותרות "שלנו בתצורת הדוור.

And now let’s test our auth only route.
Creating a GET request to return the currently logged in user
Request URL:
GET //localhost:8000/api/users/current
Response:
{ "user": { "_id": "5b0f38772c46910f16a058c5", "email": "[email protected]", "token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJlbWFpbCI6ImVyZGVsamFjLmFudG9uaW9AZ21haWwuY29tIiwiaWQiOiI1YjBmMzg3NzJjNDY5MTBmMTZhMDU4YzUiLCJleHAiOjE1MzI5MDgzMTgsImlhdCI6MTUyNzcyNDMxOH0.5UnA2mpS-_puPwwxZEb4VxRGFHX6qJ_Fn3pytgGaJT0" } }
Let’s try to do it without token in “Headers”.
Response:

The end
Thank you for going through this tutorial. If you notice any errors please report them to me. If you got stuck on any step, please refer to this GitHub repo.
You can contact me through:
- erdeljac DOT antonio AT gmail.com
Check out my app SwipeFeed.