Dzień dobry,
uczę się programowania i mam pytanie
problem: po przeładowaniu strony chce aby użytkownik był zalogowany.
Napisałem sobie API, które:
- Po wykonaniu requesta na logowanie serwer w odpowiedzi zwraca: token, id, username, tokenExpiration, role // role użytkowników
- Po stronie clienta po zalogowaniu przechowuje w pamięci (behaviorSubject) te dane przez co w "AuthGuard" mogę odwołać się do tego Subject'a i sprawdzić swoje role.
- W pamięci lokalnej (wiem w ciasteczkach lepiej) przechowuje token, id, username, tokenExpiration.
Takie podejście jest OK do momentu w którym nie przeładuje strony (trace z pamięci (z subjecta) moje role) więc AuthGuard wyrzuca "null" bo brak autoryzacji.
- Nie chce przechowywać roli w tokenie JWT bo np. jeżeli niechcący przypiszę komuś role admina to będzie miał token z adminem.
- Rola w pamięci (local/session) nie ma miejsca bo można w przeglądarce zmienić sobie rolę na np. admina.
Teoretycznie możnałoby rozwiązać to tak:
- Sprawdź czy w pamięci przeglądarki jest obiekt odpowiadający za autoryzacje. (bo jeśli nie ma to znaczy, że użytkownik wcześniej nie był zalogowany więc zwraca false)
- Jeżeli jest to wykonaj żądanie do serwera z prośbą o zwrócenie roli użytkownika wg podanego ID
I w ten sposób mogę uzyskać rolę danego użytkownika a potem z górki.
Minus tego jest taki, że po przeładowaniu strony trzeba wykonać żądanie do serwera aby dowiedzieć się jaką rolę ma użytkownik.
Może macie jakiś lepszy pomysł?:D