Zjednodušte si práci – autentifikace uživatele

16. května 2003

Rád bych navázal na svůj předchozí článek a ukázal vám další třídu pro zjednodušení nejčastějších operací v PHP. Tentokrát se budu věnovat základní autentifikaci uživatele.

Ještě než začneme s podrobným rozborem, stáhněte si kompletní zdrojový kód. Od věci není ani nahlédnutí do předchozího článku o práci s MySQL, v dalším textu budu předpokládat jednak jeho znalost, jednak použití v něm popisované třídy pro komunikaci s databází.

Základní schopnosti třídy

  • přihlášení uživatele pomocí uživatelského jména a hesla
  • kontrola přihlášení uživatele pomocí identifikačního řetězce
  • odhlášení uživatele
  • přidání nového uživatele
  • získání informací o uživateli
  • nastavení informací o uživateli
  • přenos identifikačního řetězce v cookie nebo url

Tabulka uživatelů a spojení s DB

Třída potřebuje ke své práci tabulku s uživateli, která musí obsahovat minimálně tyto čtyři sloupce:

  • id – unikátní celočíselné id uživatele. Žádný uživatel nesmí mít id=0, vhodné je přiřadit tomuto sloupci vlastnost auto_increment. Název tohoto sloupce by měl být id, pokud chcete použít jiný název, změňte vlastnost třídy field_id ($user->field_id='idecko';).
  • login – identifikátor, pomocí nějž se uživatel přihlašuje. Název tohoto sloupce by měl být login, pokud chcete použít jiný název, změňte vlastnost třídy field_login.
  • password – uživatelské heslo. Název tohoto sloupce by měl být password, pokud chcete použít jiný název, změňte vlastnost třídy field_password.
  • auth – do tohoto sloupce se ukládá hashová část identifikačního řetězce. Typ by měl být řetězec s délkou 32 znaků. Název tohoto sloupce by měl být auth, pokud chcete použít jiný název, změňte vlastnost třídy field_auth.

Tabulka může obsahovat ještě další sloupce, například reálné jméno uživatele, ale ty už nejsou pro funkčnost autentifikace uživatele důležité. K těmto dalším sloupcům můžete přistupovat pomocí metod register, getInfo a update.

Název používané tabulky nastavte do vlastnosti třídy tb_user. Třída používá pro přístup k DB třídu mysql.class.php, odkaz na její instanci tedy vložte do vlastnosti sql.

Přihlášení uživatele

Pro tuto akci použijeme metodu login($jmeno, $heslo). Význam parametrů je patrný už z jejich názvu – uživatelské jméno a heslo. Při úspěšném přihlášení vrátí metoda hodnotu true a nastaví vlastnosti id, aid, url_aid a cookie. Při neúspěchu vrací hodnotu false.

Kontrola přihlášení

Kontrolu přihlášení provádí metoda check($identifikacni_retezec). Funkce má jeden nepovinný parametr, který může obsahovat identifikační řetězec. Pokud není zadán, metoda si tyto údaje zjistí z cookie nebo url. Pokud ověření proběhne úspěšně, vrátí hodnotu true a nastaví vlastnosti id, aid, url_aid a cookie. Při neúspěchu vrací metoda hodnotu false.

Odhlášení uživatele

Pro odhlášení použijte metodu logout(). Tato metoda zruší cookie a smaže hodnotu vlastností id, aid, url_aid. (Před použitím metody logout je třeba ověřit uživatele pomocí metody check, aby bylo jasné koho chceme odhlásit.)

Přidání nového uživatele

Nového uživatele přídává metoda register($data), v parametru $data (asociativní pole) jsou uloženy informace o vytvářeném uživateli včetně uživatelského jména a hesla. V případě, že takový login už existuje, vrátí metoda hodnotu false, pokud neexistuje, zaregistruje uživatele a přihlásí jej.

Získání informací o uživateli

K získání informací o uživateli použijeme metodu getInfo($sloupce), parametr může obsahovat seznam sloupců, které se budou vytahovat z DB. Pokud není zadán, použije se * pro získání všech sloupců. Parametr se vkládá přímo do SQL dotazu, tak buďte opatrní.

Nastavení informací o uživateli

Pro nastavení informací o uživateli slouží metodat update($data). V parametru $data (asociativní pole) jsou uloženy měněné informace o uživateli. Pro volání této metody je potřeba být přihlášený, v opačném případě vrací metoda hodnotu false. Metoda nemusí měnit všechny údaje, můžete nastavit třeba jen některé. Příklad:

$user->update(array(
  ‚login‘ => ‚king‘,
  ‚name‘ => ‚The King‘
));

Získaní id uživatele a předávání identifikačního řetězce

Tyto údaje jsou dostupné až po kontrole přihlášení metodou check nebo po přihlášení metodou login. Id uživatele získáte z vlastnosti id a platný identifikační řetězec pomocí vlastnosti aid. Ve vlastnosti url_aid je identifikační řetězec v případě, že nefunguje automatické předávání pomocí cookie. Pokud je definováno url_aid, obsahuje curl_aid řetězec pro přímé vložení do url. Příklad:

// pokud $user->id obsahuje nenulovou hodnotu je uživatel přihlášen
if ($user->id) {
  echo ‚Přihlášený uživatel.
        Vaše id je ‚.$user->id.‘
        Identifiační řetězec ‚.$user->aid;
} else {
  echo ‚Nepřihlášený uživatel‘;
};
echo ‚<a href=“jinastranka.php?‘.$user->curl_aid.'“>další stránka</a>‘;

Třída umí také předávat identifikační řetězec v cookie. Pokud je vlastnost use_cookie nastavena na true, metoda check se pokusí řetězec získat z cookie a do cookie jej i uložit. Když metoda check zjistí, že se cookie uložila, nenastavuje už hodnotu vlastnosti url_aid.

Ukázka použití – základní kostra

<?php
include ‚mysql.class.php‘;
include ‚user.class.php‘;
$sql = new tMysql;          // vytvoření a nastavení instance tMysql
$sql->db_name = ‚moje_db‘;
$sql->db_server = ‚localhost‘;
$sql->db_user = ‚uzivatel‘;
$sql->db_password = ‚heslo‘;
$sql->connect();
$user = new tUser;          // vytvoření a nastavení instance tUser
$user->sql = &$sql;
$user->tb_user = ‚uzivatele‘;
$user->check();            // kontrola přihlášení
// tady program pokračuje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Další článek zsvporici.cz
Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *