Logout support is defined by a simple interface
>>> 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
>>> 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¶
zope.authentication.logout.NoLogout class can be registered as
a fallback provider of
IAuthentication components that
are not otherwise adaptable to
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