Logout?

Django, Flask, Bottle, WSGI, CGI…
Antworten
Benutzeravatar
dusselmann
User
Beiträge: 70
Registriert: Donnerstag 28. Juli 2005, 12:47
Kontaktdaten:

Hi,

ich arbeite mit dem puren Zope 2.8. Wie kann ich eine Logout-Funktion implementieren?

Grüße & Dank,

Dussel
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

dusselmann hat geschrieben: ich arbeite mit dem puren Zope 2.8. Wie kann ich eine Logout-Funktion implementieren?
Hi Dussel!

Ich kann dir jetzt nur ein paar Tipps geben:

Installiere dir in irgendeine Zope-Instanz Plone. Schau nach, welche URL beim "logout" aufgerufen wird und suche in der Plone-Site nach diesem Objekt.

In Plone ist der CookieCrumbler maßgeblich am Login und Logout beteiligt. Sobald jemand ein Objekt aufruft, für das er keine Berechtigung hat, wird von Zope ein Login angefordert. Diese Anforderung wird normalerweise an den Browser gesendet. Diese Anforderung eines Logins wird vom CookieCrumbler abgefangen und an ein Login-Formular umgeleitet. Der Browser hat also nie erfahren, dass eine Authentifizierung gefordert wurde.

Da die Anforderung des Benutzernamens nie beim Browser angekommen ist, sondern vom CookieCrumbler abgefangen wurde, wird der Browser jede Seite anonym anfordern. Der CookieCrumbler liest aber bei jeder Seitenanforderung des Browsers das Cookie mit den Logininformationen aus und übergibt diese über den HTTP-Header wieder an Zope. So als ob der Browser automatisch die Authentifizierung mitgeschickt hätte.

Wird das Cookie des CookieCrumblers gelöscht, dann sollte die nächste Anforderung wieder anonym stattfinden.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

Zu diesem Thema habe ich noch etwas gefunden. Wenn man sich im ZMI ausloggt, dann wird die Funktion "manage_zmi_logout" aufgerufen. Diese prüft ob beim Logout an eine andere Seite weitergeleitet werden soll. Wenn nicht, dann wird an den Browser "401" geschickt.

Hier die Funktion, wie sie im Modul "lib/python/App/Management.py" zu finden ist:

Code: Alles auswählen

    def manage_zmi_logout(self, REQUEST, RESPONSE):
        """Logout current user"""
        p = getattr(REQUEST, '_logout_path', None)
        if p is not None:
            return apply(self.restrictedTraverse(p))

        realm=RESPONSE.realm
        RESPONSE.setStatus(401)
        RESPONSE.setHeader('WWW-Authenticate', 'basic realm="%s"' % realm, 1)
        RESPONSE.setBody("""<html>
<head><title>Logout</title></head>
<body>
<p>
You have been logged out.
</p>
</body>
</html>""")
        return
lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten