Logout Support¶
Logout support is defined by a simple interface
zope.authentication.interfaces.ILogout
:
>>> from zope.authentication.interfaces import ILogout
that has a single ‘logout’ method.
The current use of ILogout is to adapt an
zope.authentication.interfaces.IAuthentication
instance to
ILogout
. To illustrate, we’ll create a simple logout implementation that
adapts IAuthentication
:
>>> from zope.component import adapter, provideAdapter
>>> from zope.interface import implementer
>>> from zope.authentication.interfaces import IAuthentication
>>> @adapter(IAuthentication)
... @implementer(ILogout)
... class SimpleLogout(object):
...
... def __init__(self, auth):
... pass
...
... def logout(self, request):
... print('User has logged out')
>>> provideAdapter(SimpleLogout)
and something to represent an authentication utility:
>>> @implementer(IAuthentication)
... class Authentication(object):
... pass
>>> auth = Authentication()
To perform a logout, we adapt auth to ILogout
and call ‘logout’:
>>> logout = ILogout(auth)
>>> request = object()
>>> logout.logout(request)
User has logged out
The ‘NoLogout’ Adapter¶
The zope.authentication.logout.NoLogout
class can be registered as
a fallback provider of ILogout
for IAuthentication
components that
are not otherwise adaptable to ILogout
. NoLogout
‘s logout method
is a no-op.
>>> from zope.authentication.logout import NoLogout
>>> NoLogout(auth).logout(request)
Logout User Interface¶
Because some authentication protocols do not formally support logout, it may not be possible for a user to logout once he or she has logged in. In such cases, it would be inappropriate to present a user interface for logging out.
Because logout support is site-configurable, Zope provides an adapter that, when registered, indicates that the site is configured for logout. This class merely serves as a flag as it implements ILogoutSupported:
>>> from zope.authentication.logout import LogoutSupported
>>> from zope.authentication.interfaces import ILogoutSupported
>>> ILogoutSupported.implementedBy(LogoutSupported)
True
>>> ILogoutSupported.providedBy(LogoutSupported(request))
True