Protejare rute
1. Protejarea rutelor cu ProtectedRoute și AuthRoute
Pentru a organiza mai eficient rutele aplicației, am creat două layout-uri: ProtectedLayout și AuthLayout. Aceasta permite:
Definirea unui container comun pentru rutele protejate, fără a mai înveli fiecare pagină individual.
Redirecționarea automată a utilizatorilor în funcție de starea de autentificare (
loggedIn) și afișarea unui loading spinner cât timp starea token-ului este verificată (checkTokenLoading).Utilizarea componentului
<Outlet />pentru a reda rutele copil în cadrul layout-ului corespunzător.
Hints:
Layout-urile permit definirea mai multor rute protejate sau de autentificare într-un singur bloc în router.
<Outlet />reprezintă punctul unde se vor reda toate rutele copil definite în configurația router-ului.Această structură face codul mai clar și scalabil pentru aplicații mari.
2. Mutarea Spinner-ului din App.jsx într-o componentă reutilizabilă
Pentru a putea refolosi spinner-ul în mai multe locuri, mutăm spinner-ul din componenta App.jsx într-o componentă dedicată, în cadrul dosarului components, în fișierul LoadingSpinner.jsx.
Acum putem merge în componenta App.jsx și să inlocuim spinner-ul hardcodat cu această componentă reutilizabilă.
3. Configurarea rutelor protejate cu React Router
În aplicație, am folosit ProtectedLayout și AuthLayout pentru a organiza rutele în funcție de starea de autentificare a utilizatorului. Aceasta permite definirea clară a routelor care necesită autentificare și a celor care trebuie să fie accesibile doar pentru utilizatorii neautentificați.
Rutele protejate (
ProtectedLayout) includ pagini precumProductsPage, care pot fi accesate doar dacă utilizatorul este logat.Rutele pentru neautentificați (
AuthLayout) includ paginileRegisterșiLogin, care devin inaccesibile pentru utilizatorii deja autentificați.Structura permite adăugarea rapidă a mai multor rute protejate sau de autentificare fără duplicarea codului.
Hints:
Fiecare layout (
ProtectedLayout/AuthLayout) controlează accesul la rutele copil folosindOutlet.Această organizare simplifică scalarea aplicației, deoarece adăugarea de noi rute protejate sau de autentificare se face doar în lista
children.Redirecturile și afișarea loading-ului sunt gestionate automat de layout-uri, fără a fi nevoie de logica în fiecare componentă de pagină.
4. Actualizarea componentei de Navbar
După ce am reușit să implementăm partea de rutare a aplicației, împreună cu hook-ul de validare al token-ului la refresh și am realizat și protejarea de rute, este necesar să actualizăm și navbarul.
Astfel, trebuie să ne asigurăm că putem face highlight în mod dinamic paginii din navbar pe care ne aflăm și să afișăm în mod dinamic butonul de Sign out/Sign in, dacă utilizatorul este autentificat sau nu.
Last updated