-
הקלדת URL מאפסת LocalSession
אם הבנתי מה אתה שואל אז התשובה היא - לא.
גם רענון הדף, או ניתוב לאתר אחר וחזרה לאתר זה, לא מאפסים.
רק סגירת הטאב מאפס.
https://developer.mozilla.org/en-US/docs/Web/API/Window/sessionStorage#:~:text=Whenever a document,objects in sessionStorage. -
@yossiz
הבעיה שזה כן מאפס לי.
אנסה לתאר מה אני מנסה לעשות:
יש סרויס Svc שתפקידו לוודא שמשתמש לא מורשה, לא מקליד כתובת של דף וכך עוקף את מנגנון ההגנה של סיסמה+שם.
Svc מריץ מקונסטרקטור את הפקודהsessionStorage.setItem("Allowed","0").
בקומפוננטה הראשונה שנטענת המשתמש מקבל מסך Login
שמפעיל את הפונקציה הזו, הנמצאת ב-Svc:checkPassword() { if ((this.password === "xxxx"&&this.name ==="yosi")) { sessionStorage.setItem("Allowed","1") this.router.navigate(['allitems']); } else alert('wrong password'); }
בשלב הבא בכל קומפוננטה שנטענת, בקונסטרקטור שלה נבדק ה-localSession, ע"י הפונקציה הבאה (גם היא ב-Svc):
redirectIfUnallowed(){ if(sessionStorage.getItem("Allowed") != "1") this.router.navigate(['landing']); }
הבעיה שהערך של Allowed ב-SessionStorage שומר על יציבות כל עוד אני לא ניגש ל-URL. אם אני כותב ב-URL נניח http://localhost:4200/favorites (כתובת אמיתית) הערך של Allowed מתאפס ואני נזרק אל מסך landing, למרות שהזדהתי כשורה.
-
@yossiz אמר בהקלדת URL מאפסת LocalSession?:
@yyy אם הדף נטען מחדש אז הקוד הזה רץ שוב:
sessionStorage.setItem("Allowed","0")
(אגב, זה לגמרי לא תקין לעשות בקרת גישה בצד הלקוח, אבל זה לא הנושא פה)
המקום היחיד שמופיעה פקודת איפוס שכזו, היא בקונסטרקטור של הסרויס, אבל ממה שהבנתי סרויסים באנגולר הם סינגלטונייים, כלומר נטענים פעם אחת וזהו, ולכן מה הסיבה שהקונסטרקטור רץ שוב?
(אני אומנם טוען את Svc בקונסטרקטור של כל קומפוננטה, בכדי לאפשר לקומפוננטה גישה לרכיבים של האבטחה, אבל זה לא סיבה להריץ שוב את הקונסטרקטור, ובאמת אם אני לא ניגש דרך ה-URL אלא באמצעות RouterLinks לקומפוננטה, הערך לא מתאפס, כלומר הקונסטרקטור של Svc לא רץ פעם נוספת)
-
@yossiz אמר בהקלדת URL מאפסת LocalSession?:
(אגב, זה לגמרי לא תקין לעשות בקרת גישה בצד הלקוח, אבל זה לא הנושא פה)
וזה גם לא תקין באנגולר לשמור על ראוטינג באמצעות LocalSession
הדרך הנכונה היא לשמור את פרטי המשתמש באיזה סרביס userService, ולתת לראוטר של אנגולר הוראה לאיזה נתבים צריך אימות משתמש עם CanActivate
ראה כאן הסבר
https://www.tektutorialshub.com/angular/angular-canactivate-guard-example/ -