Autentifikace uživatelů slouží k identifikaci uživatele, který přistupuje na stránky. Pokud navíc používáme funkce PHPLIB pro autorizaci, využívají právě zde získanou identifikaci uživatele.
Použití autentifikace z knihovny PHPLIB má několik výhod oproti použití autentifikačních mechanismů, které nabízejí webové servery:
První krok, který před použitím autentifikace musíme provést, je
úprava potomka třídy Auth
v souboru
local.inc
.
class IShop_Auth extends Auth { var $classname = "IShop_Auth"; var $lifetime = 15; var $database_class = "DB_IShop"; var $database_table = "auth_user"; function auth_loginform() { global $sess; include("loginform.ihtml"); } function auth_validatelogin() { global $username, $password; $this->auth["uname"]=$username; ## This provides access for "loginform.ihtml" $uid = false; $this->db->query(sprintf("select uid, perms from %s where username = '%s' and password = '%s'", $this->database_table, addslashes($username), addslashes($password))); while($this->db->next_record()) { $uid = $this->db->f("uid"); $this->auth["perm"] = $this->db->f("perms"); } return $uid; } }
Obvykle si vystačíme se změnou názvu třídy z Poe_Auth
na náš název -- např. IShop_Auth
. Odpovídajícím způsobem
musíme ještě upravit obsah členské proměnné
$classname
. Proměnnou $database_class
musíme
nastavit na jméno třídy, která obsahuje definici připojení k databázi
s tabulkou auth_user
. V našem případě to je
DB_IShop
.
Pokud chceme změnit vzhled stránky pro přihlášení, stačí změnit
obsah souboru loginform.ihtml
.
Po těchto úpravách můžeme přístup na stránky podmínit
autentifikací -- zadáním uživatelského jména a odpovídajícího
hesla. Stačí přidat další položku do pole předávaného jako parametr
funkci page_open()
.
<? page_open(array("sess" => "IShop_Session", "auth" => "IShop_Auth")); ?> <html> <head> <title>Ochráněná stránka</title> </head> <body> Tento text uvidí jen ten, kdo zná správné jméno a heslo. </body> </html> <? page_close() ?>
Uživatelé a jejich hesla jsou uloženi v tabulce
auth_user
. Pokud tedy má mít někdo přístup ke stránce,
musíme pro něj přidat odpovídající záznam do tabulky. To může udělat buď
sama knihovna PHPLIB při využití registračního režimu, o kterém se
více dozvíte v dokumentaci. Obvyklejší situace však bude ruční přidání
do databáze -- ať už skutečně ruční, nebo vyvolané skriptem poté, co
od nového uživatele získáme další osobní údaje.
Tabulka auth_user
má čtyři položky. První položkou je
identifikátor uživatele. Následuje uživatelské jméno, heslo a
oprávnění (ta se využívají při autorizaci uživatele). Pro vygenerování
jednoznačného identifikátoru uživatele se doporučuje použít
následující volání:
MD5(UniqID("nějaký text"))
Pokud tedy chceme do tabulky přidat uživatele johny
s heslem walker
, můžeme použít příkaz
INSERT INTO auth_user VALUES('30f2d6b514ace85f8ad805c146df2744','johny','walker','')
Nyní si můžeme vyzkoušet, že bez znalosti tohoto jména a hesla se na stránku nikdo nedostane.
Dobrým zvykem bývá na stránkách zobrazovat uživatelské jméno, pod
kterým jsem přihlášeni. Toho lze dosáhnout velice jednoduše -- stačí
zapátrat ve třídě Auth
:
echo $auth->auth["uname"]
K dispozici máme samozřejmě mnoho metod, které nám umožňují s
autentifikací pracovat. Voláním $auth->unauth()
nebo
$auth->logout()
zrušíme autentifikaci -- uživatel se pro
přístup na další stránku bude muset znovu přihlásit.