Autentizace (přihlášení uživatele) představuje proces ověření identity uživatele, nejčastěji prostřednictvím porovnání zadaných přihlašovacích údajů oproti seznamu existujících uživatelů.
Ve frameworku Nette hrají roli v procesu autentizace následující části.
Objekt User obsluhuje přihlášení (login()) a odhlášení logout() uživatele a ověření, zda je uživatel stále přihlášen (isLoggedIn()).
Objekt Autentikátor, ověřuje zadané přihlašovací údaje uživatelem (authenticate()).
Objekt Identity obsahuje data uživatele.
Shrnutí procesu přihlášení uživatele
Akce presenteru volá metodu login($username, $password) třídy User. Ta pověří objekt třídy implementující rozhraní IAuthenticator. Ten ověří přihlašovací údaje proti seznamu existujících uživatelů a v případě úspěchu vrátí třídě User data o uživateli v podobě objektu třídy Identity.
Přihlášení uživatele – třída User
Objekt třídy Nette\Security\User se stará o autentizaci a autorizaci uživatele.
Současně udržuje identitu uživatele v session a využívá ji k autorizačním procesům.
Objekt získáme v presenteru zavoláním metody getUser,
$user = $this->getUser();
případně pomocí Dependency Injection.
Přihlášení uživatele
$user->login($username, $password);
Zjištění, zda je uživatel přihlášen
$user->isLoggedIn();
Odhlášení uživatele
$user->logout();
Před přihlášením lze pomocí metody setExpiration() nastavit dobu, po jejíž uplynutí bude uživatel odhlášen automaticky (vyprší session):
$user->setExpiration('30 minutes');
Důvod odhlášení
Metoda getLogoutReason() nám řekne důvod ohlášení.
$user->getLogoutReason();
Možnosti:
- Vypršel časový limit (IUserStorage::INACTIVITY)
- Uživatel zavřel prohlížeč (IUserStorage::BROWSER_CLOSED)
- Odhlášení metodou logout() (IUserStorage::MANUAL)
Ověření uživatele – Autentikátor
Vlastní ověření správnosti zadaných přihlašovacích údajů provádí tzv. autentikátor.
- Můžeme si napsat vlastní autentikátor, podle svých potřeb.
- Velmi jednoduchý autentikátor (Nette\Security\SimpleAuthenticator) je přímo součástí frameworku Nette.
- V sandboxu Nette je dodáván autentikátor v podobě třídy App\Model\UserManager.
Autentikátor implementuje rozhraní Nette\Security\IAuthenticator.
Rozhraní obsahuje jedinou metodu authenticate(), která vrací identitu uživatele v podobě objektu třídy Nette\Security\Identity, případně výjimku Nette\Security\AuthenticationException v případě neúspěšného ověření.
Identita uživatele – třída Identity
Obsahuje údaje o uživateli, které vrací autentikátor.
Objekt implementující rozhraní Nette\Security\IIdentity.
Výchozí implementaci představuje třída Nette\Security\Identity.
Získáme jej pomocí metody getIdentity() třídy User.
$user->getIdentity();
Pozor: v Nette je ve výchozím stavu identita uživatele zachována i po odhlášení uživatele. Viz. metoda logout() třídy User.