====================
Login/Logout Snippet
====================

The class LoginLogout:

  >>> from zope.app.security.browser.auth import LoginLogout

is used as a view to generate an HTML snippet suitable for logging in or
logging out based on whether or not the current principal is authenticated.

When the current principal is unauthenticated, it provides
IUnauthenticatedPrincipal:

  >>> from zope.app.security.interfaces import IUnauthenticatedPrincipal
  >>> from zope.app.security.principalregistry import UnauthenticatedPrincipal
  >>> anonymous = UnauthenticatedPrincipal('anon', '', '')
  >>> IUnauthenticatedPrincipal.providedBy(anonymous)
  True

When LoginLogout is used for a request that has an unauthenticated principal,
it provides the user with a link to 'Login':

  >>> from zope.publisher.browser import TestRequest
  >>> request = TestRequest()
  >>> request.setPrincipal(anonymous)
  >>> LoginLogout(None, request)()
  u'<a href="@@login.html?nextURL=http%3A//127.0.0.1">[Login]</a>'

When LoginLogout is used for a request that has an authenticated principal:

  >>> from zope.security.interfaces import IPrincipal
  >>> from zope.interface import implements
  >>> class Bob:
  ...     implements(IPrincipal)
  ...     id = 'bob'
  ...     title = description = ''
  >>> bob = Bob()
  >>> IUnauthenticatedPrincipal.providedBy(bob)
  False
  >>> request.setPrincipal(bob)

it provides the user with a link to 'Logout':

  >>> LoginLogout(None, request)()
  u'<a href="@@logout.html?nextURL=http%3A//127.0.0.1">[Logout]</a>'
