Zend Framework – Céges Demo portál – Bejelentkezés – Zend Authentikáció használatával XIV. rész

Az előző cikkben elkészült a bejelentkezési űrlap, most megmutatjuk, hogyan célszerű megvalósítani a bejelentkeztetést. Ehhez a korábban létrehozott IndexController() processRegisztracioAction() eseményét ahogy van másoljuk le s nevezzük át processBejelentkezesAction()-re. Tulajdonképpen majdnem ugyanaz marad a forrása is, de az email validáció ellenőrzés után, mi most nem mentjük az adatokat az adatbázisban, hanem végrehajtjuk a felhasználó azonosítását.

Felhasználók bejelentkeztetésére, a Zend Frameworknek van egy speciális megoldása Zend_Auth_Adapter, meg kell adni, mely adatbázis mező alapján ellenőrizze a felhasználónevet/emailcímet éppen amivel dolgozunk, melyik adatbázis mező alapján ellenőrizze a jelszavat.

Most a processBejelentkezesAction() eseményünket amit korábban a processRegisztracioAction() eseményből másoltunk át,módosítanunk kell, még pedig az email validációs rész után, így:

//ha valid
if ($felhasznalo_azonosito = Regisztracio::bejelentkezes($r_email,$r_password)){
$felhasznalok = new Regisztracio();
$felhasznalok->load($felhasznalo_azonosito);
$felhasznalok->felh_passw = '';
$felhasznaloSession = new Zend_Session_Namespace('felhasznalo');
$felhasznaloSession->felhasznalo = $felhasznalok;
$this->_helper->flashMessenger->addMessage("Sikeres bejelentkezés!");
$this->_redirect('/index/index');

Mit is látunk itt?

Van egy if utasításunk amiben meghívjuk a Regisztracio::bejelentkezes($r_email,$r_password) metódusunkat,amely visszaadja a bejelentkező felhasználó azonosítóját. Ezzel az azonosítóval, lekérdezzük a felhasználónk összes adatát az adatbázisból a $felhasznalok Regisztracio model objektumunk load() metódusának segítségével. Figyelnünk kell hogy a jelszót ne tegyük bele, ezt egy egyszerű felülírással meg is tesszük: $felhasznalok->felh_passw = ''; Ezt az objektumot átadjuk az új a kliens szerveroldali sessionazonosítójához rendelt új ‘felhasznalo’ névteréhez a következő pár sornyi utasítással:

$felhasznaloSession = new Zend_Session_Namespace('felhasznalo');
$felhasznaloSession->felhasznalo = $felhasznalok;

Így tulajdonképpen, egy a kliens szerveroldali session azonosítójához, rendelünk egy új névteret, amibe beleillesztjük a bejelentkezendő felhasználónk összes adatát, a jelszót biztonsági okokból null/” értékkel helyettesítjük. Ez mindaddig érvényben marad amíg, felhasználónk ki nem jelentkezik, vagy ki nem kapcsolja böngészőjét, ekkor ugyanis a szerver eldobja a klienshez tartozó session azonosítót.

Most nézzük magát a Regisztracio::bejelentkezes($r_email,$r_password) metódusunkat, ami a Regisztracio.php Model obejktumban kapott helyett:

public static function bejelentkezes($email=null, $password=null)
{
$returnValue = false;
$db = Globals::getDBConnection();
//authentication
$auth = Zend_Auth::getInstance();
$authAdapter = new Zend_Auth_Adapter_DbTable($db);
$authAdapter->setTableName('felhasznalok')
->setIdentityColumn('felh_email')
->setCredentialColumn('felh_passw')
->setCredentialTreatment('md5(?)')
->setIdentity($email)
->setCredential($password);
$result = $auth->authenticate($authAdapter);
if ($result->isValid()) {
$felhasznalok = $authAdapter->getResultRowObject('idfelhasznalok');
$returnValue = (int)$felhasznalok->idfelhasznalok;
} // if ($result->isValid())
return $returnValue;
}

A bejelentkezes metódusunk() megkapja a bejelentkezési űrlapon beírt email, jelszó párost. Csinálunk egy $returnValue nevezetű új változót aminek null értéket adunk (a ‘null’ érték nem azonos a ‘0’ értékkel). Létrehozzuk a szokásos adatbázis-kapcsolatot. Az $auth változóval létrehozunk egy Zend_Auth példányt magunknak. Illetve egy Authentikációs adaptert is az adatbázisos bejelentkezés miatt, melynek meg is adjuk az adatbázis kapcsolatot reprezentáló $db változónkat is. Az adapternek átadjuk melyik adatbázis tábla alapján kell dolgoznia beállítjuk az entitást, azaz melyik oszlop alapján kell ellenőriznie az email címet, illetve megadjuk a jelszavakat tartalmazó oszlop nevét is. Mivel a jelszavakat md5 kódolással tároljuk az adatbázisunkban ezt is meg kell adni: ->setCredentialTreatment('md5(?)'). Ha ezzel megvagyunk akkor még meg kell adni az email címet illetve a jelszót ami alapján az adatbázisban az összehasonlítás elvégezhető. Ezt az összehasonlítást a Zend_Auth objektumát reprezentáló $auth változónk authenticate metódusa oldja meg számunkra, melynek paramétere a korábban létrehozott Adapter. Ennek van egy visszatérési értéke, ami ha valid akkor lekérdezzük a felhasználónk azonosítóját:

$felhasznalok = $authAdapter->getResultRowObject('idfelhasznalok');
$returnValue = (int)$felhasznalok->idfelhasznalok;

és beállítjuk visszatérési értéknek, ha nem valid akkor null értékell térünk vissza, ekkor az if utasítás ahol a bejelentkezés metódussal dolgozunk null értéket kap ami a hamis ágon fut le majd ezután(Rossz felhasználó email páros!). Ha meg sikerül a bejelentkezés akkor vissza adjuk a felhasználó azonosítót és a fentebb részletezett műveleteket hajtjuk végre.

Advertisements

Vélemény, hozzászólás?

Adatok megadása vagy bejelentkezés valamelyik ikonnal:

WordPress.com Logo

Hozzászólhat a WordPress.com felhasználói fiók használatával. Kilépés / Módosítás )

Twitter kép

Hozzászólhat a Twitter felhasználói fiók használatával. Kilépés / Módosítás )

Facebook kép

Hozzászólhat a Facebook felhasználói fiók használatával. Kilépés / Módosítás )

Google+ kép

Hozzászólhat a Google+ felhasználói fiók használatával. Kilépés / Módosítás )

Kapcsolódás: %s