React – token kezelés

React

Ebben a példában egy tokent fogunk menteni, beolvasni. Hozzunk létre egy Home, Oldal1, Oldal2 komponenst! Készítsünk navigációt, és egy beviteli mezőt a tokennek! Ha van token, a beviteli mező és gomb tünjön el, helyettük egy kilépés menüpont jelenjen meg!

Megoldás

A tokent a local storage-ban tároljuk el. Minden oldalon ellenőrizzük a token meglétét, de nincs validálás, azt a backend végzi.

Inicializálás a localStorage-ból
A useState itt egy úgynevezett lazy initializer függvényt kap:

A useContext a React egyik beépített Hook-ja, amely lehetővé teszi az adatok (állapotok, függvények, objektumok) átadását a komponensfán keresztül anélkül, hogy azokat manuálisan, szintről szintre kellene továbbadni („prop drilling”). Képzeld el úgy, mint egy rádióadót: a Context az adótorony, a useContext pedig a rádiókészülék, amivel bárki rácsatlakozhat az adásra, függetlenül attól, milyen messze van a toronytól. A useContext az a „láthatatlan csatorna”, ami összeköti a beviteli mezőt (ahol a tokent megadjuk) és az oldalakat (ahol a tokent kiírjuk), anélkül, hogy a kettő között kézzel kellene küldözgetni az adatot. Az AuthContext olyan, mint egy központi raktár. Itt határozzuk meg, hogy mit fogunk tárolni (tokent, bejelentkezési és kijelentkezési funkciókat).
Az AuthProvider komponens a kódban a postás szerepét tölti be. Ő felel azért, hogy az információ eljusson mindenkihez. Amit a value prop-ba teszel, azt minden „gyerek” látni fogja. Tehát az App.jsx-ben minden benne van. (teljes fájl a git reposítoryban )

Amikor valamelyik komponensnek (például a Header-nek) szüksége van a tokenre, a useContext segítségével „belehallgat”:


Az alkalmazás indulásakor (vagy frissítésekor) rögtön ellenőrzi, hogy van-e már elmentett token a böngészőben. Ha van, azzal indul az állapot, így a felhasználónak nem kell minden frissítésnél újra beírnia.

A setToken függvény két dolgot csinál egyszerre:

  • ha kap értéket, elmenti a localStorage-ba. Ha üres (pl. kijelentkezés), törli onnan.
  • állapotfrissítés: Frissíti a React állapotot (setTokenState), amitől az összes komponens újrarajzolódik, ahol használják a tokent.

Storage esemény figyelő

Ha a felhasználónak több fülön is meg van nyitva az oldal, és az egyiken kilép (vagy tokent vált), a storage esemény segítségével a többi fül is azonnal észleli a változást és frissíti magát.

Cleanup: A removeEventListener biztosítja, hogy ne maradjanak „szemét” eseményfigyelők, amikor a komponens megsemmisül.

Hogyan működik ez a gyakorlatban?

  • AuthProvider: Ő a „gazda”. Körbeöleli az egész alkalmazást, és biztosítja a „távvezetéket” (Context).
  • Consumer (useAuth): Bármelyik komponens (pl. a Header vagy egy védett oldal) rá tud csatlakozni erre a vezetékre a useAuth() hook segítségével.

Működés:

  • Beírod a tokent a Headerben → Meghívódik a setToken.
  • A token bekerül a localStorage-ba ÉS a React állapotba.
  • Minden oldal, ami kiírja a tokent, azonnal frissül.