Any ideas on that? I've re-read my code, and the documentation, but I didn't see anything obvious. Should I ask pylons-devel instead? I'm not sure if writing your own AuthenticationPolicy counts as pylons- discuss or -devel material ;-)
oO On Mar 4, 11:10 am, oO <[email protected]> wrote: > I seem to be having problems implementing a custom Authentication > Policy class. I've created the following class, and the only purpose > is to remember and forget users using the Session, rather than > creating your own cookie as with the AuthTktAuthenticationPolicy > class. I'm using pyramid_beaker as the session manager, but I > authenticate against a MongoDB backend, so I wrote my own Auth. > > For some reason the pyramid.security.forget and > pyramid.security.remember callables are not defering to the methods > inside my object. Did I miss anything in my implementation? I know the > documentation had a very simplistic example on how to roll your own > Auth class (it was missing the unauthenticated_userid() method) and I > think the implements(IAuthenticationPolicy) part is probably important > too, but from reading the code I'm not sure why my methods are not > called. > > My workaround is to remember/forget by calling the session directly in > the login/logout views, but that doesn't seem correct. > > ----- in my __init__.py file > > #Auth > from holllo.security import AuthSessionPolicy > from pyramid.authorization import ACLAuthorizationPolicy > #Session > from pyramid_beaker import session_factory_from_settings > > ... > > #Session > session_factory = session_factory_from_settings(settings) > #Auth > authn_policy = AuthSessionPolicy() > authz_policy = ACLAuthorizationPolicy() > > #Create the Configurator > config = Configurator( root_factory=Root, > settings=settings, > session_factory = > session_factory, > > authentication_policy=authn_policy, > > authorization_policy=authz_policy) > ... > > ----- in my security.py file > > from pyramid.authentication import CallbackAuthenticationPolicy > from zope.interface import implements > from pyramid.interfaces import IAuthenticationPolicy > > class AuthSessionPolicy(CallbackAuthenticationPolicy): > """Implements a session-based rather than cookie-based > authentication policy. Assumes that the current user is > stored in request.session['user'] and that user['email'] > is the unique userid. > """ > implements(IAuthenticationPolicy) > > def callback(self, userid, request): > """Retrieve the current user from the session, and return the > groups""" > user = request.session.get('user', None) > if user: > return user['groups'] > else: > return None > > def remember(self, request, principal, **kw): > """ Return a set of headers suitable for 'remembering' the > principal named ``principal`` when set in a response. An > individual authentication policy and its consumers can decide > on the composition and meaning of **kw. """ > log.debug("Remember the userid and user") > request.session['user'] = principal > request.session['userid'] = principal.get('username') > > def forget(self, request): > """ Return a set of headers suitable for 'forgetting' the > current user on subsequent requests. """ > log.debug("Forget the userid and user") > del request.session['user'] > del request.session['userid'] > > def unauthenticated_userid(self, request): > return request.session.get('userid', None) -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To post to this group, send email to [email protected]. To unsubscribe from this group, send email to [email protected]. For more options, visit this group at http://groups.google.com/group/pylons-discuss?hl=en.
