Einfaches Login / Logout

Hier finden sich Fragen und Ergänzung zur Dokumentation. // All questions and discussions about the documentation.
Antworten
Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Einfaches Login / Logout

Beitrag von ma2604121 » 05.06.2011, 21:31:15

Ich versuche nachzuvollziehen, wie ich mit dem APF eine einfache Loginseite erstellen kann. Hierbei soll der Benutzer die Möglichkeit haben, mittels einer Checkbox der Anwendung mitzuteilen, dass er angemeldet bleiben möchte. Wird dies nicht gewählt, muss der Benutzer beim erneuten Besuch der Seite erneut seine Daten eingeben und sich legitimieren. Ansonsten soll er direkt (in diesem Fall zum Logout) weitergeleitet werden, ohne das Login-Formular zu sehen.

In diesem Beispiel soll der Benutzer nach erfolgter Anmeldung auf eine Seite weitergeleitet werden, auf der er sich abmelden kann. Meldet er sich ab, soll wiederum eine Weiterleitung zum Login erfolgen.

Aus Vereinfachungsgründen soll in diesem Beispiel der Abgleich der Benutzerdaten mit einer Datenbank unterbleiben. Stattdessen wird ein Vorgabewert geprüft (Benutzername: user / Passwort: pwd).

Die index.php in /apps/log würde demnach wie folgt aussehen:

Code: Alles auswählen

<?php
// Fehlermeldungen einschalten
ini_set('html_errors', 'on');

// Zeitzone setzen
date_default_timezone_set('Europe/Berlin');

// Pagecontroller starten
require_once './apps/core/pagecontroller/pagecontroller.php';

// Frontcontroller starten
import('core::frontcontroller', 'Frontcontroller');

$fC = &Singleton::getInstance('Frontcontroller');
$fC->setContext('log');

// Startseite anzeigen
echo $fC->start('log::pres::templates', 'login');

?>
Der Controller loginController.php im Grundgerüst:

Code: Alles auswählen

<?php
class loginController extends base_controller{

    public function  transformContent() {

    // View holen
    $form = &$this->__getForm('login');

    // View ausgeben
    $this->__getForm('login')->transformOnPlace();

    }
}
?>
Und die HTML-Datei login.html:

Code: Alles auswählen

<@controller namespace="log::biz" file="loginController" class="loginController" @>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8" />
<title>Login</title>
</head>
<body>

<!-- Header -->
<div id="header">
    <h1><a href="log.php">Login</a></h1>
</div>

<!-- Inhalt -->
<div id="content">

<core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />
<html:form name="login">

Benutzername <form:text name="nick" minlength="6" maxlength="100" class="eingabe"/><br/>
Passwort <form:text name="pwd" minlength="6" maxlength="100" class="eingabe"/><br/>
Angemeldet bleiben <form:checkbox name="keep" class="eingabe"/><br/>
<form:button name="send" value="Anmelden"/>

</html:form>

</div>

</body>
</html> 
Als Komponenten für eine solche Lösung dürften der SessionManager und / oder CookieManager dienen. Liege ich damit richtig?

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: Einfaches Login / Logout

Beitrag von Screeze » 05.06.2011, 21:56:23

Müsste soweit passen, habe gerade wenig zeit, jedoch halte ich es für sinnvoller ein paar Tage zu warten oder dir mal die aktuelle beta-Implementierung in der Sandbox anzusehen, da mit 1.14 ein generischer Login inklusive Sessionverwaltung kommt, Diskussion und vollständiges demopack gibt's hier:
viewtopic.php?f=10&t=692&start=15#p7457

Ich hab das Pack heute reviewed und bis auf ein paar Kleinigkeiten die vielleicht noch angepasst werden halte ich es für ausreichend für die meisten Anwendungsfälle und werde meine eigene Implementierung demnächst darauf umstellen.

Lediglich die Wiedererkennbarkeit mit einem Cookie musst du selber Regeln.
Hierzu müsstest du den Login etwas anpassen/erweitern, wobei du dich am mitgelieferten orientieren kannst. (Wobei ich sogar bevorzugen würde eine derartige Funktion mitzuliefern und per Config zu aktivieren, da ich selber diesen Anwendungsfall habe, aber ich glaube das hat Christian letztin mal abgelehnt)

Im Prinzip ist es nichts anderes als ein Cookie mit dem CookieManager zu erstellen mit einer möglichst zufälligen und nicht errechenbarer ID, die irgendwo in der db abgelegt und mit dem User verknüpft sein muss. Beim betreten prüfst du einfach ob der user bereits eingeloggt ist, und falls nicht prüfst du ob du ihn anhand einer solchen ID identifizieren kannst.

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfaches Login / Logout

Beitrag von ma2604121 » 05.06.2011, 22:08:37

Ja, das sieht interessant aus. Vielleicht sollte ich gelegentlich mehr Augenmerk auf die aktuellen Entwicklungen legen... ;)

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Einfaches Login / Logout

Beitrag von dr.e. » 05.06.2011, 23:28:08

Nee, abgelehnt hatte ich das nicht, nur wollte ich für 1.14 zunächst etwas fertiges liefern können. Hübsch machen und erweitern können wir das natürlich immer noch. ;)
Viele Grüße,
Christian

Benutzeravatar
ma2604121
Beiträge: 349
Registriert: 24.01.2011, 23:42:18

Re: Einfaches Login / Logout

Beitrag von ma2604121 » 19.08.2011, 16:51:38

Muss das Thema nochmals aufgreifen:

Wo genau muss ich den CookieManager einbinden? Wenn ich es richtig sehe, wäre es sinnvoll, dies in /apps/modules/usermanagement/pres/documentcontroller/umgt_login_controller.php zu realisieren?

Andererseits habe ich dann immer Probleme, wenn Updates bereitstehen...

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Einfaches Login / Logout

Beitrag von dr.e. » 20.08.2011, 17:41:56

Hi,

die relevanten Stellen sind umgt_login_controller und die LogoutAction, in der das Cookie ja wieder gelöscht werden muss. Ebenfalls muss zu Anfang der Abarbeitung des Requests eine FC-Action dafür sorgen, dass die Info im Cookie zu einem expliziten Login führt, damit du auch alle relevanten Informationen in der Session hast. Das darf dann aber nur erfolgen, wenn der Benutzer neu in der Session ist.

Weitere Herausforderung ist, mehrere Logins pro Session zu ermöglichen.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 2 Gäste