"""
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
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)
|