Login / Logout
Als nächstes wollen wir uns ein und ausloggen. Dazu erstellen wir eine login und logout Action in der Root Page:
sub login :Action :Public {
my $self = shift;
if (request->is_post) {
# als erstes suchen wir den Benutzer in der Datenbank
my $user = Wiki::Model::User->
find_one('nickname' => request->param('nickname'));
# wenn dieser nicht gefunden wurde, teilen wir das dem Anwender mit
unless ($user) {
response->message('Benutzer nicht gefunden');
return;
}
# wenn das Passwort nicht stimmt, teilen wird das ebenfalls dem Anwender mit
unless ($user->password eq request->param('password')) {
response->message('Falsches Passwort');
return;
}
# jetzt kann der Benutzer eingeloggt werden
session->user($user);
response->message('Willkommen ' . $user->nickname);
response->redirect($self->href);
}
}
sub logout :Action :Public {
my $self = shift;
# wir löschen hier einfach das Benutzer Objekt aus der Session.
response->message('Ciao ' . session->user->nickname);
session->user(undef);
response->redirect(request->path->Root->href);
}
Das request->path->Root->href liefert die erstellte Root Page in unserem Request. Besser verstehen kann man das, wenn man die _ info action aufruft. z.B. http://localhost/wiki/first/_info. Hier sehen wir ganz oben den Path, und welche Page mit welchem Path- Teil verbunden ist. Bei uns ist z.b. /wiki mit der Root Page verbunden, und wenn wir jetzt die Root Page haben, und dort href aufrufen bekommen wir die URL http://localhost/wiki.
Als nächstes brauchen wir noch ein Template, welches uns das Login Formular anzeigt, und einen Link der uns auf dieses Formular bringt. Wir erstellen also mal die Datei /WebTek/app/Wiki/templates/Root/login.tpl:
<h4>Im Wiki anmelden</h4>
<% form %>
nickname: <% input name="nickname" %><br />
password: <% input name="password" type="password" %><br /><br />
<% input type="submit" name="cancel" %>
<% input type="submit" name="login" %>
<% form_end %>
und bauen den login link in das master.tpl ein. Dazu ändern wir den body im master.tpl wie folgt:
<body>
<% code eval="
if (session->user) {
return 'Eingeloggt als: ' . session->user->nickname .
' (' . $self->link('href' => $self->href('action' => 'logout')) . ')';
} else {
return 'Hier ' . $self->link(
'href' =>$self->href('action' => 'login'),
'display' => 'einloggen',
);
}
" %>
<hr />
<% response.message prefix="<p class=\"message\"><i>" suffix="</i></p>" %>
<% response.body %>
</body>
zurück weiter
|