Webdesign Guide – User-Modul: Login
Seit dem letzten Teil des Webdesign-Guide können sich unsere Besucher registrieren, einen Account anlegen und ihren Account aktivieren. Es werden bislang zwar noch Fehlermeldungen nach der Registrierung und nach dem Aktivieren ausgegeben, aber darum kümmern wir uns später. In diesem Teil kümmern wir uns nun darum das sich unsere registrierten Besucher einloggen können.
Im Ordner “includes” legen wir dafür die Datei “login.php” an und im Smarty-Template Ordner die Datei “loginform.tpl“.
/* START – Quellcode login.php */
<?php
require_once 'HTML/QuickForm.php';
require_once 'HTML/QuickForm/Renderer/ArraySmarty.php';
require_once 'Auth/Auth.php';
require_once 'smarty/libs/Smarty.class.php';
require_once 'includes/config.php';
function controlLogin()
{
global $myauth;
return $myauth->getAuth();
}
$loginForm = new HTML_QuickForm('loginForm','post','/login','','',true);
$authParams = array('dsn'=>DB_SYSTEM_1,'table'=>'user','usernamecol'=>'username','passwordcol'=>'pass','cryptType'=>'md5','db_fields'=>'*');
$myauth = new Auth ('DB', $authParams, 'controlLogin()', false);
$myauth->start();
//wenn Account nicht existiert, logge den User wieder aus
if($_SESSION[_authsession][data][active] == 0)
$myauth->logout();
//prüfe ob der eingeloggte User den Logout-button betätigt hat
if($myauth->checkAuth() && isset($_GET['logout']) && $_GET['logout'] == '1') {
$myauth->logout();
$myauth->start();
}
//prüfe ob der user schon eingeloggt ist und den logout button gedrückt hat
if($myauth->checkAuth()) {
$smarty->assign('loginForm_logout', '<a href="index.php?action=login&logout=1">logout</a>');
}
//zeige das loginformular an falls der user noch nicht eingeloggt ist
if(!$myauth->checkAuth()){
$loginForm->applyFilter('__ALL__','trim');
$loginForm->addElement('header', null, 'Login');
$loginForm->addElement('text','username', 'Benutzername', array('size'=>12,'maxlength'=>40,'class'=>'login_field'));
$loginForm->addElement('password','password', 'Passwort', array('size'=>12,'maxlength'=>20,'class'=>'login_field'));
$loginForm->addElement('submit', btn_login, 'Einloggen', array('id'=>'login_button'));
$loginForm->addRule('username', 'Bitte den Benutzernamen eingeben', 'required');
$loginForm->addRule('password', 'Bitte das Passwort eingeben', 'required');
$loginForm->registerRule('controlLogin', 'function', 'controlLogin');
if ($loginForm->isSubmitted() && $loginForm->validate()) {
$loginForm->freeze();
}
else if (($loginForm->isSubmitted() && !($loginForm->validate())) && (!($_GET['logout'] == '1'))){
$smarty->assign('login_error', 'Login fehlgeschlagen');
}
}
$loginFormRenderer =& new HTML_QuickForm_Renderer_ArraySmarty($smarty);
$loginForm->accept($loginFormRenderer);
$smarty->assign('loginForm_data', $loginFormRenderer->toArray());
?>
/* ENDE – Quellcode login.php */
Login.php – Codeerklärung
function controlLogin()
{
global $myauth;
return $myauth->getAuth();
}
$loginForm = new HTML_QuickForm('loginForm','post','/login','','',true);
$authParams = array('dsn'=>DB_SYSTEM_1,'table'=>'user','usernamecol'=>'username','passwordcol'=>'pass','cryptType'=>'md5','db_fields'=>'*');
$myauth = new Auth ('DB', $authParams, 'controlLogin()', false);
$myauth->start();
Dieser Abschnitt ist für die Authentifizierung unserer Benutzer zuständig. In “authParams” sagen wir der Klasse Auth wie unsere Datenbankstruktur mit den Userinformationen aussieht, haben wir das einmal abgebildet, weiß Auth fortan wie es auf die Benutzerinformationen zugreifen kann. Die Parameter im einzelnen:
- dsn – die Verbindungsdaten zur Datenbank damit Auth auch die Daten abfragen kann
- table – wie heißt die Tabelle in der die Benutzerinformationen gespeichert sind
- usernamecol – wie heißt die Spalte in der der Benutzername gespeichert ist
- passwordcol – das gleiche für das Passwort
- cryptType – wie wurde das Passwort abgespeichert. Da wir die Benutzerpasswörter mit “MD5″ codieren, müssen wir das hier auch angeben
- db_fields – wenn sich der Benutzer erfolgreich authentifiziert hat, welche Daten sollen dann aus der Tabelle selektiert werden
Als nächstes erzeugen wir dann die Instanz der Klasse Auth und dort verwenden wir auch die gerade angegebenen Parameter. Mit “controlLogin” wird die Auth-Instanz initialisiert.
//wenn Account nicht existiert, logge den User wieder aus
if($_SESSION[_authsession][data][active] == 0)
$myauth->logout();
//prüfe ob der eingeloggte User den Logout-button betätigt hat
if($myauth->checkAuth() && isset($_GET['logout']) && $_GET['logout'] == '1') {
$myauth->logout();
$myauth->start();
}
//prüfe ob der user schon eingeloggt ist und den logout button gedrückt hat
if($myauth->checkAuth()) {
$smarty->assign('loginForm_logout', '<a href="index.php?action=login&logout=1">logout</a>');
}
Diese drei Abfragen prüfen folgendes:
- Wurde der Useraccount schon aktiviert, falls nein, logge den Benutzer wieder aus
- Prüfe ob der eingeloggte Benutzer den Logout button gedrückt hat, dann logge ihn aus
- Wenn der Benutzer eingeloggt ist, dann zeige ihm den Logout button an (wird einer Smarty-Variablen zugewiesen)
Hier sollte ich vielleicht noch erwähnen das, sobald ein User eingeloggt wurde, eine Session für ihn angelegt wird, auf die wir mit $_SESSION[_authsession][data][*] zugreifen können. Das “*” steht dabei für eine beliebige Spalte aus der Usertabelle der Datenbank, da wir alle selektiert haben, können wir auf jede Spalte zugreifen.
Der restliche Code ist nur dafür da das Loginformular zu erzeugen und die Werte an Smarty zu übermitteln, das wurde in den vorigen Teilen schon ausführlich besprochen.
/* START – Quellcode loginform.tpl */
<span id="loginForm">
{if !$loginForm_logout}
<form {$loginForm_data.attributes}>
{$loginForm_data.hidden}
<!-- Display the fields -->
<table>
<tr>
<th class="form_login_label">{$loginForm_data.username.label}</th>
<th class="form_login_label">{$loginForm_data.password.label}</th>
<th> </th>
<td style="font-size: 0.8em; width: 250px; color: red;">{if $login_error}{$login_error}{/if}</td>
</tr>
<tr>
<td>{$loginForm_data.username.html}</td>
<td>{$loginForm_data.password.html}</td>
<td>{$loginForm_data.btn_login.html}</td>
<td style="font-size: 0.7em; width: 250px;"><a href="http://domain.de/index.php?action=password_lost">Passwort vergessen</a></td>
</tr>
</table>
</form>
{else}
<br />
eingeloggt
<br />
{$loginForm_logout}
{/if}
</span>
/* ENDE – Quellcode loginform.tpl */
Loginform.tpl – Codeerklärung
Im Smarty-Template geben wir nun unser Loginformular aus, vorausgesetzt der User ist nicht schon eingeloggt (was wir mittels $loginForm_logout prüfen), denn ist das der Fall wird stattdessen die Mitteilung ausgegeben das der User schon eingeloggt ist und einen Link mit dem er sich ausloggen kann. Sollte dieser Code nicht verständlich genug sein empfiehlt sich nochmal ein Blick in die vorigen Teile in denen dieser Part ausführlich erläutert wurde.
Verwandte Artikel
- Webdesign Guide – User-Modul: Registrieren
- Webdesign Guide – Modul: Kontaktformular und Dankesseite
- Webdesign Guide – Programmieren einer eigenen Web-Anwendung mit PHP, MySQL, Smarty, Pear, ModRewrite
- Webdesign Guide – Awakening the biest
- Webdesign Guide – die Arbeitsumgebung
- Pingback: Webdesign Guide - Programmieren einer eigenen Web-Anwendung mit PHP, MySQL, Smarty, Pear, ModRewrite » Webdesignblog on Januar 10, 2007
Tut mir leid, die Kommentarfunktion für diesen Beitrag ist geschlossen.
