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: autentifikace.html,v 1.2 2000/10/30 10:21:48 Admin Exp $