Homebrew (Wikipedie), správce balíčků pro macOS a od verze 2.0.0 také pro Linux, byl vydán ve verzi 4.5.0. Na stránce Homebrew Formulae lze procházet seznamem balíčků. K dispozici jsou také různé statistiky.
Byl vydán Mozilla Firefox 138.0. Přehled novinek v poznámkách k vydání a poznámkách k vydání pro vývojáře. Řešeny jsou rovněž bezpečnostní chyby. Nový Firefox 138 je již k dispozici také na Flathubu a Snapcraftu.
Šestnáctý ročník ne-konference jOpenSpace se koná 3. – 5. října 2025 v Hotelu Antoň v Telči. Pro účast je potřeba vyplnit registrační formulář. Ne-konference neznamená, že se organizátorům nechce připravovat program, ale naopak dává prostor všem pozvaným, aby si program sami složili z toho nejzajímavějšího, čím se v poslední době zabývají nebo co je oslovilo. Obsah, který vytvářejí všichni účastníci, se skládá z desetiminutových
… více »Richard Stallman přednáší ve středu 7. května od 16:30 na Technické univerzitě v Liberci o vlivu technologií na svobodu. Přednáška je určená jak odborné tak laické veřejnosti.
Jean-Baptiste Mardelle se v příspěvku na blogu rozepsal o novinkám v nejnovější verzi 25.04.0 editoru videa Kdenlive (Wikipedie). Ke stažení také na Flathubu.
TmuxAI (GitHub) je AI asistent pro práci v terminálu. Vyžaduje účet na OpenRouter.
Byla vydána nová verze R14.1.4 desktopového prostředí Trinity Desktop Environment (TDE, fork KDE 3.5, Wikipedie). Přehled novinek i s náhledy v poznámkách k vydání. Podrobný přehled v Changelogu.
Bylo vydáno OpenBSD 7.7. Opět bez písničky.
V Tiraně proběhl letošní Linux App Summit (LAS) (Mastodon). Zatím nesestříhané videozáznamy přednášek jsou k dispozici na YouTube.
Minule jsem vytvořil formulář pro přihlášení, ale nedodělal jsem akci, která zpracovává data z formuláře. Zatím jsem jen provedl kontrolu, zda jsou data do formuláře zadaná validní. Dnes se tedy podívám na jednu z metod, jak v Zendu provést autentizaci, a to asi nejpoužívanější - ověření uživatelem zadaného loginu a hesla oproti záznamu v databázi.
Pro účely autentizace Zend nabízí třídu Zend_Auth
. Tato třída samotná ale ke skutečnému provádění autentizace neslouží. Slouží spíše jako obalující třída pro různé úkony s autentizací spojené (krom provedení autentizace např. k uložení výsledku atd.). Autentizace samotná je prováděna autentizačními adaptéry. Adaptér musí implementovat rozhraní Zend_Auth_Adapter_Interface
, které definuje pouze jedinou metodu, a tou je metoda authenticate()
. Pro autentizaci oproti záznamu v databázi je v Zendu již připraven adaptér Zend_Auth_Adapter_DbTable
(dále jsou dostupné adaptéry pro autentizaci přes Ldap, OpenId a další). Adaptéru nastavíme atributy potřebné pro úspěšné provedené autentizace daným způsobem (např. v jaké tabulce databáze je login a heslo) a zavoláme metodu authenticate()
. Ta jako výsledek vrátí (i neúspěšném případě) výsledek reprezentovaný třídou Zend_Auth_Result
. Tento výsledek pak můžeme uložit a později opět získat pomocí třídy Zend_Auth
. Pokud neurčíme jinak, bude Zend_Auth
výsledek ukládat do session. Jelikož Zend_Auth
je singleton, její instanci lze získat pouze přes statickou metodu Zend_Auth::getInstance()
.
Vše asi bude srozumitelnější z příkladu. Předpokládejme, že máme v databázi následující tabulku, kde je krom loginu a hesla navíc uložena informace, zda je účet aktivní a navíc uživatelova role (tu pak využijeme při autorizaci):
CREATE TABLE userlogin(login_id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,login VARCHAR(255) UNIQUE NOT NULL, passwd VARCHAR(32) NOT NULL, active BOOLEAN NOT NULL, role VARCHAR(10) NOT NULL);Z registrů získáme v nich uložené spojení do databáze a vytvoříme instanci
Zend_Auth_Adapter_DbTable
:
$db = Zend_Registry::get('db'); $authAdapter = new Zend_Auth_Adapter_DbTable($db);Na adaptéru nastavíme tabulku, kde jsou uloženy autentizační údaje a jméno sloupečku v tabulce, kde je login a kde heslo:
$authAdapter->setTableName('userlogin'); $authAdapter->setIdentityColumn('login'); $authAdapter->setCredentialColumn('passwd'); $authAdapter->setCredentialTreatment('MD5(?) AND active = 1');Poslední řádek určuje, jak se má zacházet s heslem (v našem případě získat MD5 hesla, neboť v databázi je uloženo jen MD5 hesla) a další dodatečnou podmínku, aby byla autentizace úspěšná (zde je dodatečná podmínka, že účet musí být aktivní). Nyní ještě musíme nastavit pro jaká data chceme autentizaci provádět:
$authAdapter->setIdentity($username); $authAdapter->setCredential($passwd);a můžeme zavolat
authenticate()
, a to jak již bylo řečeno, přímo na adaptéru nebo na instaci Zend_Auth
:
$auth = Zend_Auth::getInstance(); $result = $auth->authenticate($authAdapter);Jestli byl pokus o autentizaci úspěšný, zjistíme zavoláním metody
isValid()
na objektu $result
(instance Zend_Auth_Result
).
Jestliže voláme metodu authenticate()
výše uvedeným způsobem (tj. na instanci Zend_Auth
), Zend_Auth
krom zavolání metody authenticate()
na adaptéru uloží v případě úspěšné autentizace identitu uživatele do session.
Identitu můžeme získat i z objektu $result
zavoláním metody getIdentity()
a nebo (to je asi nejčastější a nejdůležitější způsob) přes Zend_Auth
opět voláním metody getIdentity()
(ještě před tím můžeme ověřit, že identita existuje zavoláním metody hasIdentity()
). Tj. kdekoli v aplikaci můžeme ověrit, zda je uživatel přihlášen, a jestliže ano, tak se podívat, co je to za uživatele:
$auth = Zend_Auth::getInstance(); if ($auth->hasIdentity()) { $identity = $auth->getIdentity(); }Identita obsahuje jen login uživatele. Pokud bychom chtěli, aby obsahovala i další údaje, můžeme do ní z login tabulky načíst i další údaje, slouží k tomu metoda
getResultRowObject()
:
$data = $authAdapter->getResultRowObject(null,array('passwd','active')); $auth->getStorage()->write($data);Zde jsem načetli z tabulku celou řádku až na heslo, které je zbytečné (ba dokonce nebezpečné) v session ukládat a stejně tak je dál zbytečný atribut active. Metoda
getResultRowObject()
má dva parametry. První parametr metody getResultRowObject()
je pole obsahující názvy sloupců tabulky, které chceme získat (pokud je null
, berou se všechny) a druhý pole s názvy sloupců, které chceme vynechat (pokud první parametr nebude null
, pak se již na druhý argument nebere zřetel). Nyní tedy máme v případe úspěšné autentizace uživatele v session uložen jeho login, id a roli. Roli příště využijeme pro autorizaci.
Pokud se uživatel odhlásí, patrně by bylo dobré vymazat jeho identitu. To se snadno zařídí následujícím způsobem:
Zend_Auth::getInstance()->clearIdentity();Celá akce pro přihlášení, minule nedodělaná, by tedy mohla vypadat třeba takto:
public function authAction(){ if (!$this->getRequest()->isPost()) { return $this->_forward('index'); } $form = $this->getLoginForm(); if (!$form->isValid($_POST)) { $this->view->form = $form; return $this->render('showform'); } $db = Zend_Registry::get('db'); $authAdapter = new Zend_Auth_Adapter_DbTable($db); $authAdapter->setTableName('userlogin'); $authAdapter->setIdentityColumn('login'); $authAdapter->setCredentialColumn('passwd'); $authAdapter->setCredentialTreatment('MD5(?) AND active = 1'); $authAdapter->setIdentity($username); $authAdapter->setCredential($passwd); $auth = Zend_Auth::getInstance(); $result = $auth->authenticate($authAdapter); if ($result->isValid()) { $data = $authAdapter->getResultRowObject(null,array('passwd','active')); $auth->getStorage()->write($data); $this->_redirect('/loginNeeded'); } else { $this->view->message = 'Login failed.'; } }A pro úplnost ještě akce pro odhlášení:
function logoutAction(){ Zend_Auth::getInstance()->clearIdentity(); $this->_redirect('/login'); }
Tiskni
Sdílej:
$prihlaseny = Zend_Auth::getIdentity();