Viewing file: logout_guard.py (1.76 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
""" How to access the session from guard's logout function. """
# Some resource for our site from zope.interface import implements
from nevow import guard from nevow import rend from nevow import loaders from nevow import tags as T from nevow import url
class MyRootResource(rend.Page): addSlash = True docFactory = loaders.stan( T.html[ T.body[ T.a(href=url.here.child(guard.LOGOUT_AVATAR))['Click here to log out'] ] ] )
# Cred-specific implementation #
from twisted.cred.portal import IRealm from nevow.inevow import IResource
class Mind: def __init__(self, request, credentials): self.request = request self.credentials = credentials
class MyRealm: implements(IRealm) def requestAvatar(self, avatar_id, mind, *interfaces): if IResource in interfaces: return ( IResource, MyRootResource(), self.createLogout(avatar_id, mind) ) raise NotImplementedError def createLogout(self, avatar_id, mind): def logout(): # This will be a nevow.guard.GuardSession instance session = mind.request.getSession() print 'Logging avatar', avatar_id, 'out of session', session return logout
# Code for examples.tac #
from twisted.cred.portal import Portal from twisted.cred.checkers import AllowAnonymousAccess from twisted.cred.credentials import IAnonymous from nevow.guard import SessionWrapper
def createResource(): portal = Portal(MyRealm()) portal.registerChecker(AllowAnonymousAccess(), IAnonymous)
# Here is the vital part: specifying a mindFactory for guard to use return SessionWrapper(portal, mindFactory=Mind)
|