intro wiki download guestbook contact

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