Skip to content

19 Autentifikácia

Patrik Hrkút edited this page Nov 11, 2023 · 1 revision

Autentifikácia

Framework poskytuje základnú implementáciu autentifikácie, dokonca je k dispozícii aj pohľad s prihlasovacím formulárom a pohľad, ktorý sa zobrazí po prihlásení. Vývojár si môže vzhľad a spôsob overovania identity prispôsobiť podľa svojich potrieb.

Pohľady pre autentifikáciu

V adresári App\Views\Auth sa nachádzajú dva pohľady: login.view.php a logout.view.php. Keďže pri prihlasovaní nepotrebujeme mať menu, pohľady používajú iné rozloženie stránky, čo je vidieť z nastavenia $layout = 'auth';. Tieto pohľady, podobne ako ostatné, používajú Bootstrap na zobrazenie formulára. Vzhľad formulára si môžete upraviť podľa svojich potrieb. Ak chcete na prihlasovanie používať svoju vlastnú akciu, môžete v konfigurácii nastaviť jej URL adresu (konštanta Config\Configuration::LOGIN_URL).

Implementácia autentifikácie

V triede konfigurácie aplikácie Config\Configuration sa nachádza konštanta AUTH_CLASS, ktorá určuje, ktorá trieda sa použije pri autentifikácii. Vzorová jednoduchá autentifikácia je implementovaná v triede App\Auth\DummyAuthenticator. Táto trieda implementuje rozhranie App\Core\IAuthenticator. Autentifikácia je veľmi jednoduchá, overuje len používateľa admin a správne heslo je admin. Ak si chcete implementovať vlastný spôsob autentifikácie, napr. overovanie používateľa v databáze, mali by ste si implementovať vlastnú triedu autentifikátora podľa rozhrania App\Core\IAuthenticator. Podľa potrieb si môžete implementovať všetky metódy vlastným spôsobom, ale implementácia bude veľmi podobná ako v triede App\Auth\DummyAuthenticator. Jedinou výrazne inou metódou bude login(), ktorý musí reflektovať váš spôsob overovania identity. Na záver nezabudnite v konfigurácii nastaviť svoju novú triedu ako tú, ktorá sa bude používať v aplikácii.

Poznámka: Vo vzorovej implementácii prihlasovania sa do session uloží login prihláseného používateľa. Ak potrebujete, môžete si do session pridať viac údajov, ktoré budete v aplikácii potrebovať. Prípadne na vrátenie doplňujúcich informácií o používateľovi môžete implementovať metódu getLoggedUserContext().

Použitie autentifikácie v pohľadoch

Ak je používateľ prihlásený, jeho údaje sú uložené v session a môžete túto informáciu využiť na posúdenie, či má prístup ku konkrétnym akciám aplikácie, alebo na rozhodovanie, ktoré časti používateľského rozhrania majú byť používateľovi zobrazené (napr. niektoré položky v menu, tlačidlá a pod). V každom pohľade je k dispozícii premenná $auth, ktorá obsahuje inštanciu autentifikátora, a tak môžete volať všetky jej metódy. Veľmi často budete používať volanie $auth->isLogged(), ktorá Vám vráti informáciu, či je používateľ prihlásený (true), alebo nie (false). Na základe tejto informácie môžete obmedziť zobrazovanie tých častí používateľského rozhrania, ktoré majú zostať skryté, napr. neprihláseným používateľom.

Poznámka: Nezabudnite na začiatku každého pohľadu uviesť dokumentačný komentár /** @var \App\Core\IAuthenticator $auth */, aby vám vývojové prostredie bolo schopné pomáhať s názvami metód a nepodčiarkovalo Vám $auth ako neznámu premennú.

Použitie autentifikácie v kontroléroch

Podobne ako v pohľadoch, aj v kontroléroch je možné overovať, či je používateľ prihlásený. Zvyčajne je potrebné zabezpečiť, aby niektoré akcie neboli dostupné pre neprihláseného používateľa. V kontroléri je dostupná premenná $auth cez inštanciu aplikácie:

$auth = $this->app->getAuth();

Premenná predstavuje inštanciu autentifikátora a pomocou nej môžete riešiť prístup pre prihláseného používateľa v metóde príslušnej akcie, alebo v spoločnej metóde authorize(), ktorá sa volá pred každou akciou. Metóda je implementovaná v predkovi AControllerBase a vo svojom kontroléri si ju môžete prekryť. Metóda ako parameter dostane názov akcie a postupne môžete implementovať jednotlivé obmedzenia pre príslušné akcie, prípadne naraz pre všetky akcie kontroléra, ako je ukázané na nasledujúcom príklade:

public function authorize($action)
{
        return $this->app->getAuth()->isLogged();
}

Návratová hodnota metódy bude true alebo false, podľa toho, či sa akcia (všetky akcie) majú vykonať, alebo nie. Ak sa používateľ pokúsi pristúpiť na akciu, ktorá je dostupná len po prihlásení, framework ho presmeruje na stránku s prihlásením.