בשעה טובה ישנן פונקציות המחזירות את המשתמש המחובר, וניתן לעבוד איתן בראוטים.
מצאתי לנכון לכתוב פוסט עם מעט הבהרות, כיצד להשתמש בהן.
את הפונקציות המדוברות ניתן למצוא בתיקייה: 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.
אני מקווה שהכל ברור, ובכל מקרה אני פה כדי לעזור