-
Notifications
You must be signed in to change notification settings - Fork 22
19 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.
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
).
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()
.
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ú.
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.