Skip to content

dream-coder.de

Blog über .NET, SQL Server, PHP, TYPO3 und sonstige technischeThemen

  • Home
  • Impressum

Suche

Recent Comments

  • Horst Liesinger on Linux – grep mit ODER Verknüpfung – egrep
  • cbee on SmtpClient und Gmail Fehler
  • Mungo Jerry on VirtualBox USB Treiber unter Windows 7 x64
  • Christian on [C#] – Vermeide if(bool == true)
  • DokuWiki on Übersichtlichkeit in TYPO3 durch Färbung der Seitenbäume

Tags

  • .NET
  • AJAX
  • ASP.NET
  • Bash
  • Batch
  • Browser
  • C#
  • Certified TYPO3 CMS Integrator
  • Controls
  • CSS
  • Database
  • Design Pattern
  • Editor
  • Free
  • FUN
  • Google
  • GridView
  • javasc
  • JavaScript
  • KnowHow
  • Linux
  • Login
  • MVC
  • Paint.NET
  • PHP
  • Plugins
  • Privat
  • Shell
  • Theme
  • tipps
  • Tools
  • Twitter
  • TYPO3
  • typoscript
  • Ubuntu
  • Validator
  • virtualbox
  • Visual Studio
  • vmware
  • Windows
  • Wordpress
  • ZendFramework
  • Zend Studio
  • Zend_Auth
  • Zend_Search_Lucene

Categories

My Networks

Twitter - Christian Hünniger Xing - Christian Hünniger

Blogroll

  • itblogging.de
  • t3o.org

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Tag: Zend_Auth

ZendFramework – Zend_Auth mit aktiven und inaktivem Nutzer

In meinem vorherigen Post habe ich geschrieben, wie man mit dem ZendFramework eine Spalte auf Eindeutigkeit prüft. Nun habe ich mit Zend_Auth herumgespielt. Diese Klasse ist für das Anmelden gegen eine definierte Datenquelle über einen Provider zuständig. Nun war meine pers. Anforderung, über Zend_Auth einen Login zu realisieren, welches auch aktive und inaktive User berücksichtigt. Ich habe dies in einem Modul integriert namens User.

Tabelle (gekürzt)

--
-- Tabellenstruktur für Tabelle `user`
--
 
CREATE TABLE IF NOT EXISTS `user` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `username` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  `firstname` VARCHAR(45) NOT NULL,
  `lastname` VARCHAR(45) NOT NULL,
  `email` VARCHAR(45) NOT NULL,
  `active` tinyint(4) DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `email` (`email`),
) ENGINE=InnoDB  DEFAULT CHARSET=utf-8;

-- -- Tabellenstruktur für Tabelle `user` -- CREATE TABLE IF NOT EXISTS `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(45) NOT NULL, `password` varchar(45) NOT NULL, `firstname` varchar(45) NOT NULL, `lastname` varchar(45) NOT NULL, `email` varchar(45) NOT NULL, `active` tinyint(4) DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `email` (`email`), ) ENGINE=InnoDB DEFAULT CHARSET=utf-8;

Das Formular (vereinfacht):

// application/modules/user/form/Login.php
class User_Form_Login extends Zend_Form
{
    public function init()
    {
        // diese Felder kann man auch über Zend_Config realisieren
 
 
        $this->setAction('/user/authentication/login');
        $this->setName('loginform');
        $this->setMethod('post');
 
 
        $username = new Zend_Form_Element_Text('username');
        $username->setLabel('Benutzername');
        $username->setRequired();
 
 
        $password = new Zend_Form_Element_Password('password');
        $password->setLabel('Passwort');
        $password->setRequired();
 
        $submit = new Zend_Form_Element_Submit('submit');
        $submit->setLabel('Anmelden');
 
        $this->addElements(array($username, $password, $submit));
    }
}

// application/modules/user/form/Login.php class User_Form_Login extends Zend_Form { public function init() { // diese Felder kann man auch über Zend_Config realisieren $this->setAction('/user/authentication/login'); $this->setName('loginform'); $this->setMethod('post'); $username = new Zend_Form_Element_Text('username'); $username->setLabel('Benutzername'); $username->setRequired(); $password = new Zend_Form_Element_Password('password'); $password->setLabel('Passwort'); $password->setRequired(); $submit = new Zend_Form_Element_Submit('submit'); $submit->setLabel('Anmelden'); $this->addElements(array($username, $password, $submit)); } }

Im View (gekürzt):

<?php // application/modules/user/views/scripts/authentication/login.phtml ?>
<h1>Login</h1>
<?= $this->form->render(); ?>

<?php // application/modules/user/views/scripts/authentication/login.phtml ?> <h1>Login</h1> <?= $this->form->render(); ?>

Der Authentifizierungscontroller:

// application/modules/user/controller/Authentication.php
class User_AuthenticationController extends Zend_Controller_Action
{
    public function init()
    {
        /* Initialize action controller here */
    }
 
    public function indexAction()
    {
        // action body
    }
 
    public function loginAction()
    {
        // schon eingeloggt?
        if (Zend_Auth::getInstance()->hasIdentity()) {
            $this->_redirect('/');
        }
 
        $form = new User_Form_Login();
        $this->view->form = $form;
 
        if ($this->getRequest()->isPost()) {
            $formData = $this->getRequest()->getPost();
 
            if ($form->isValid($formData)) {
 
                $authAdapter = $this->getAuthAdapter();
                $authAdapter->setIdentity($form->getValue('username'));
                $authAdapter->setCredential($form->getValue('password'));
 
                $auth = Zend_Auth::getInstance();
                $res = $auth->authenticate($authAdapter);
 
                if ($res->isValid()) {
                    $identity = $authAdapter->getResultRowObject();
                    $authStorage = $auth->getStorage();
                    $authStorage->write($identity);
 
                    // ...
 
                } else {
                    // ...
                }
            } else {
                $form->populate($formData);
            }
        }
 
 
 
 
    }
 
    public function logoutAction()
    {
        // action body
        Zend_Auth::getInstance()->clearIdentity();
        $this->_redirect('/');
    }
 
    /**
     * Liefert den AuthAdapter
     *
     * @return Zend_Auth_Adapter_DbTable
     */
    private function getAuthAdapter()
    {
        return new Zend_Auth_Adapter_DbTable(
            Zend_Db_Table::getDefaultAdapter(),
            'user',
            'username',
            'password'
        );
    }
}

// application/modules/user/controller/Authentication.php class User_AuthenticationController extends Zend_Controller_Action { public function init() { /* Initialize action controller here */ } public function indexAction() { // action body } public function loginAction() { // schon eingeloggt? if (Zend_Auth::getInstance()->hasIdentity()) { $this->_redirect('/'); } $form = new User_Form_Login(); $this->view->form = $form; if ($this->getRequest()->isPost()) { $formData = $this->getRequest()->getPost(); if ($form->isValid($formData)) { $authAdapter = $this->getAuthAdapter(); $authAdapter->setIdentity($form->getValue('username')); $authAdapter->setCredential($form->getValue('password')); $auth = Zend_Auth::getInstance(); $res = $auth->authenticate($authAdapter); if ($res->isValid()) { $identity = $authAdapter->getResultRowObject(); $authStorage = $auth->getStorage(); $authStorage->write($identity); // ... } else { // ... } } else { $form->populate($formData); } } } public function logoutAction() { // action body Zend_Auth::getInstance()->clearIdentity(); $this->_redirect('/'); } /** * Liefert den AuthAdapter * * @return Zend_Auth_Adapter_DbTable */ private function getAuthAdapter() { return new Zend_Auth_Adapter_DbTable( Zend_Db_Table::getDefaultAdapter(), 'user', 'username', 'password' ); } }

In meiner persönlichen Anforderung wollte ich aber, das man auch einen Aktivstatus realisiert. Wenn ein User sich also registriert, soll er erstmal inaktiv sein und sich entweder durch eine E-Mail oder den Admin aktiviert werden. Solange darf er sich natürlich nicht anmelden können. Dazu ist nur ein Parameter mehr erforderlich

    /**
     * Liefert den AuthAdapter
     *
     * @return Zend_Auth_Adapter_DbTable
     */
    private function getAuthAdapter()
    {
        return new Zend_Auth_Adapter_DbTable(
            Zend_Db_Table::getDefaultAdapter(),
            'user',
            'username',
            'password',
            'SHA1(?) AND active=1'  // hier kann man den credentialColumn-Parameter anpassen
        );
    }

/** * Liefert den AuthAdapter * * @return Zend_Auth_Adapter_DbTable */ private function getAuthAdapter() { return new Zend_Auth_Adapter_DbTable( Zend_Db_Table::getDefaultAdapter(), 'user', 'username', 'password', 'SHA1(?) AND active=1' // hier kann man den credentialColumn-Parameter anpassen ); }

Vielleicht habt ihr ja noch weitere Möglichkeiten, den Loginprozess zu optimieren. Ich bin auf jeden Kommentar gespannt 🙂

Related Posts:

  • Zend_Search_Lucene – Suche nach Zahlen
  • ZendFramework – Eindeutigen Datensatz prüfen
  • ajax Origin null is not allowed by Access-Control-Allow-Origin
  • Zend Studio 7.2 – Autovervollständigung geht nicht mehr
  • TYPO3 4.3 – Frontendediting aktivieren
Posted on 27. May 20103. August 2022Categories KnowHow, PHP, ZendFrameworkTags Login, PHP, ZendFramework, Zend_Auth2 Comments on ZendFramework – Zend_Auth mit aktiven und inaktivem Nutzer
Proudly powered by WordPress