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.