HowTo: Implementierung des Logins in der Demo2
Einleitung
In diesem Use Case werden folgende Funktionen in die Demo2 eingebaut:
- Ein Loginformular
- Anzeigen des Loginformulars/des aktuellen Benutzers abhängig vom Benutzerstatus
- Die Möglichkeit auszuloggen
Verwendete Dateien
Diese Dateien können mit einem normalen Texteditor bearbeitet werden (z.B. dem Windows Editor) INSTALLATIONSDIR\webroot\demo2\includes\top.ijsp (zur Testseite)
Das Login HTML-Formular
Wir wollen an der Stelle, an der sich derzeit nur der aktuelle Benutzername befindet, die Loginfunktionalität einbauen. Mit der Methode core.getUserName() kann der aktuelle Benutzer abgefragt werden:
top.ijsp Zeile 100:
<td class="greybox"> <!-- content--> <%=core.getUserName()%> <!-- End content --> </td>
Zusätzlich zur Ausgabe des Benutzernamens wird an dieser Stelle das Login-Formular eingebaut:
top.ijsp Zeile 100:
<td class="greybox"> <!-- content--> <%=core.getUserName()%> <form method="post"> Name:<br> <input name="Login_username"><br> Passwort:<br> <input type="password" name="Login_userauth"><br> <input type="submit" name="Login_createEntry" value="Einloggen"> </form> <!-- End content --> </td>
Die Namen der Inputfelder können der Core-Implementiersdokumentation entnommen werden.
Die Loginfunktionalität
Da das Formular alleine noch keine Funktionalität beinhaltet muss diese im JSP eingebaut werden. Dazu muss zuerst das Login Modul initialisiert werden:
top.ijsp Zeile 1:
<% Login login = new Login(core); %> <html> <head>
Danach wird die Funktion createEntry des Moduls Login aufgerufen. Diese kümmert sich um das einloggen der Benutz in das System:
top.ijsp Zeile 1:
<% Login login = new Login(core); login.createEntry(); %> <html> <head>
Nun ist es möglich sich mit einem gültigen Benutzer einzuloggen.
Anhand des Benutznamens erkennt man, dass das Einloggen funktioniert hat.
Das Loginformular nicht mehr anzeigen
Trotzdem man eingeloggt ist, sieht man immer noch das Loginformular. Zusätzlich ist das Anzeigen des Gastbenutzernamens nicht unbedingt schön. Um gewisse Teile des HTMLs abhängig vom Benutzerstatus (angemeldet/nicht angemeldet) auszublenden verwendet man am besten Java mit der Funktion core.isLoggedOn():
top.ijsp Zeile 103:
<td class="greybox"> <!-- content--> <% if (core.isLoggedOn()) { out.print (core.getUserName()); } else { %> <form method="post"> Name:<br> <input name="Login_username"><br> Passwort:<br> <input type="password" name="Login_userauth"><br> <input type="submit" name="Login_createEntry" value="Einloggen"> </form> <% } %> <!-- End content --> </td>
Mithilfe der gleichen Technik kann z.B. auch die Überschrift geändert werden.
Logout
Eine weitere wichtige Funktion ist das Abmelden. Die einfachste Methode ist, einen Link um den Benutzernamen zu legen:
top.ijsp Zeile 106:
<% if (core.isLoggedOn()) { out.print ("< a href='?Login_deleteEntry=true'>"+core.getUserName()+"</a>"); } else
Natürlich muss man auch die entsprechende Funktion des Login Moduls aufrufen:
top.ijsp Zeile 1:
<%
Login login = new Login(core);
login.createEntry();
login.deleteEntry();
%>
Jetzt funktioniert das Abmelden. Es wird aber auffallen, das man sich danach nicht mehr Anmelden kann. Der Grund dafür besteht in der Art wie das Loginformular und der Link zusammenarbeiten: Auf der einen Seite steht in der URL immer noch:
auf der anderen Seite werden die Logindaten mittels Post mitgeschickt. D.h. das Login Modul bekommt sowohl die Anforderung sich einzuloggen, als auch sich auszuloggen. Für diese Problem gibt es 3 Lösungen
Vertauschen der Funktionen
top.ijsp Zeile 1:
<%
Login login = new Login(core);
login.deleteEntry();
login.createEntry();
%>
Dadurch wird zwar das deleteEntry ausgeführt und der Benutzer abgemeldet, was dem Gast ziemlich egal sein wird, das anmelden geschieht aber danach. Dadurch kommt es zu keinen Konflikt, selbst wenn beide Funktionen ausgelöst werden. Dies ist die einfachste und schönste Lösung.
Ändern des Login Formulares auf get
top.ijsp Zeile 111:
else
{
%>
<form method="get">
Name:<br>
Diese Lösung ist nicht zu empfehlen, da dadurch der Benutzername und das Passwort in der Addresszeile angezeigt werden.
Erstellen eines Logout-formulares mit post
top.ijsp Zeile 105:
<!-- content--> <% if (core.isLoggedOn()) { %> <form method="post" name="logoutform"> <input type="hidden" name="Login_deleteEntry"> ; <a href="JavaScript:logoutform.submit()"><%=core.getUserName()%></a> </form> <% } else
Diese Methode funktioniert, ist auch nicht so unsicher, aber auf jeden Fall deutlich komplizierter als die Methode 1. Die Teile des fertigen top.ijsp
Zeile 1:
<% Login login = new Login(core); login.deleteEntry(); login.createEntry(); %> <html> <head>
Zeile 100:
<td class="greybox"> <!-- content--> <% if (core.isLoggedOn()) { out.print (core.getUserName()); } else { %> <form method="post"> Name:<br> <input name="Login_username"><br> Passwort:<br> <input type="password" name="Login_userauth"><br> <input type="submit" name="Login_createEntry" value="Einloggen"> </form> <% } %> <!-- End content --> </td>
Attachments
- login1.png (2.3 kB) - added by niko 5 years ago.
- login2.png (4.4 kB) - added by niko 5 years ago.
- login3.png (3.6 kB) - added by niko 5 years ago.
- login4.png (1.5 kB) - added by niko 5 years ago.
- login5.png (3.3 kB) - added by niko 5 years ago.
- login6.png (1.5 kB) - added by niko 5 years ago.
- login7.png (1.7 kB) - added by niko 5 years ago.
- login8.png (2.3 kB) - added by niko 5 years ago.








