עבודה עם המשתמש המחובר למערכת

בשעה טובה ישנן פונקציות המחזירות את המשתמש המחובר, וניתן לעבוד איתן בראוטים.
מצאתי לנכון לכתוב פוסט עם מעט הבהרות, כיצד להשתמש בהן.
את הפונקציות המדוברות ניתן למצוא בתיקייה: app/internal/security/dependancies

ישנן 4 פונקציות שונות, שהמשותף לכולן הוא כיצד משתמשים בהן:
כולן בנויות באופן שהיישום שלהן אמור להיות כדיפנדנסי עבור ראוט, באופן הבא:

עבור ההדגמה אני משתמש באחת מהן, הנקראת current_user

ניתן גם ליישם באופן הבא, המתאים בעיקר לפונקציות שמחזירות בוליאן. באופן זה, ערך ההחזרה מהפונקציה אינו מוכנס למשתנה, ולא ניתן להשתמש בו בתוך הפונקציה שלכם. הדיפנדנסי תתפקד רק כהגנה על הראוט:

מכנה משותף נוסף הוא שכולן מגינות על ראוט. במידה והשתמשתם בהן בכניסה לראוט, והמשתמש אינו מחובר, הוא יופנה אוטומטית לעמוד לוגאין. לאחר ההתחברות הוא יוחזר אוטומטית לראוט שלכם.

השונה בין הפונקציות הוא ערך ההחזרה שלהן, כפי שמתואר בתיעוד שלהן:
is_logged_in - מחזירה בוליאן בלבד. מיועדת רק על הגנה על ראוט, ללא שימוש בנתוני המשתמש.
is_manager - גם כן מחזירה בוליאן, מגינה על ראוט עבור משתמש המוגדר כמנהל בלבד.
current_user- מחזירה אובייקט פיידנטיק המכיל: user_id, username. לנוחיותכם השתמשתי במחלקה ולא במילון.
לתשומת לבכם, הפונקציה הזאת אינה פונה לדאטה בייס עבור הנתונים. היא מחזירה אותן ישירות מהטוקן שהמשתמש נושא איתו ממערכת האבטחה. מהסיבה הזאת היא ‘יעילה’ עבור פעולות השרת, וכל עוד אינכם צריכים נתונים נוספים עבור המשתמש, אנא השתמשו בה.
current_user_from_db - מחזירה אובייקט User מלא מהדאטה בייס, עם כל הנתונים שלו. היא הכי פחות ידידותית מבחינת משאבים, מאחר והיא פונה לדאטה בייס. אנה השתמשו בה רק אם אתם חייבים את הנתונים הספציפיים שכל הפונקציות האחרות אינן מספקות.
בנוסף, ישנה הדגמה עבור כל אחת מהפונקציות בקובץ tests\security_testing_routes.
אני מקווה שהכל ברור, ובכל מקרה אני פה כדי לעזור :slight_smile:

13 לייקים

בשעה טובה, משהו שהוא קריטי להמשך הפרויקט!
תודה לך קובי!

3 לייקים

קודם כל עבודה אדירה וקריטית להמשך. תודה המון :slight_smile:
דבר שני- רציתי לשאול אם אתה עובד עם פונקציה שמכניסה משתמש כמחובר כדי לבחון אם זה עובד. ואם יש טסטים שלהן איפשהו אשמח גם לקבל ניתוב

קודם כל תודה רבה :). אני לא בטוח שהבנתי את השאלה. בפוסט כתבתי בדיוק היכן ניתן לראות הדגמה של איך להפעיל את זה, ואיך זה עובד. ישנו קובץ עם ראוטים שיצרתי במיוחד עבור הבדיקה, בתיקיית tests. שם הקובץ הוא security_testting_routes. על פי הבדיקות שעשיתי, הכל עובד

יש ב test_login פונקציה test_login_successful שמצאתי מאוד שימושית.