Autentifikace uživatelů v PHPLIB

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.

© Jiří Kosek 1999
$Id$