On 10/20/06, Shannon -jj Behrens <[EMAIL PROTECTED]> wrote:
> I really like the paste.auth.cookie module, but I have a few questions:
>
> 1. This is less important, but why wasn't the old school Cookie module
> used instead of constructing the cookie by hand?
>
> 2. I need to set the domain of the cookie, but there isn't a way.
> This relates slightly to question 1.  I can think of many ways to
> architect this including:
>
>   a) Setup the AuthCookieHandler class so that it can be subclassed
> easily.  This would involve breaking up the response_hook a little
> bit.
>
>   b) paste.auth.cookie.AuthCookieHandler could look for a callable in
> environ that is used to do some post processing of the cookie.
>
> Right now, I don't see any other options than copying and modifying
> the whole module.
>
> 3. I'm using Pylons, and I have the AuthCookieHandler installed in my
> pipeline like this:
>
>     PylonsApp
>     ...
>     httpexceptions.make_middleware
>     AuthCookieHandler
>     ErrorHandler
>     ...
>
> I'm initializing via:
>
>     # Setup paste.auth.cookie.  Putting it here is perfect because
>     # redirects still get cookies, but exceptions still get handled.
>     app = AuthCookieHandler(app,
>                             cookie_name=app_conf['acctmgr_cookie_name'],
>                             secret=app_conf['acctmgr_secret'])
>
> Unfortunately, putting it here *is not* perfect, because I see in my logs:
>
> =================================================================
> Exception happened during processing of request from ('127.0.0.1', 43522)
> Traceback (most recent call last):
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/httpserver.py",
> line 404, in process_request_in_thread
>     self.finish_request(request, client_address)
>   File "/usr/lib/python2.4/SocketServer.py", line 254, in finish_request
>     self.RequestHandlerClass(request, client_address, self)
>   File "/usr/lib/python2.4/SocketServer.py", line 521, in __init__
>     self.handle()
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/httpserver.py",
> line 325, in handle
>     BaseHTTPRequestHandler.handle(self)
>   File "/usr/lib/python2.4/BaseHTTPServer.py", line 316, in handle
>     self.handle_one_request()
>   File "/usr/lib/python2.4/BaseHTTPServer.py", line 310, in handle_one_request
>     method()
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/httpserver.py",
> line 228, in wsgi_execute
>     self.wsgi_start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/registry.py",
> line 309, in __call__
>     app_iter = self.application(environ, start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/recursive.py",
> line 83, in __call__
>     return CheckForRecursionMiddleware(e.factory(self),
> environ)(environ, start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/recursive.py",
> line 46, in __call__
>     return self.app(environ, start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/errordocument.py",
> line 77, in __call__
>     return self.app(environ, keep_status_start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/recursive.py",
> line 81, in __call__
>     return self.application(environ, start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/errordocument.py",
> line 181, in __call__
>     app_iter = self.application(environ, change_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/cascade.py",
> line 92, in __call__
>     return self.apps[-1](environ, start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/evalexception/middleware.py",
> line 175, in __call__
>     return self.respond(environ, start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Pylons-0.9.2-py2.4.egg/pylons/error.py",
> line 210, in respond
>     return self.application(environ, start_response)
>   File 
> "/usr/lib/python2.4/site-packages/Paste-0.9.8.1-py2.4.egg/paste/auth/cookie.py",
> line 249, in __call__
>     raise AssertionError("AuthCookie already installed!")
> AssertionError: AuthCookie already installed!
> =================================================================
>
> This happens whenever I do something like "abort(404)" in my code.  I
> think it has to do with Paste doing another "subrequest".  I think the
> auth.cookie code is surprised to see the same environ again.  I don't
> understand where in the pipeline I should put the auth.cookie
> middleware so that I don't have this problem.  I didn't see any
> mention in the docs where I should put it.
>
> Thanks for the code and all your help!

I'm still at a loss about the other two questions, but to correct the
AssertionError, I put the AuthCookieHandler below the ErrorDocuments.
It seems wrong for some reason, but it results in a) cookies get set
in all cases b) abort(404) doesn't result in an AssertionError.  I
wish I knew with certainty what the RIGHT THING was.

-jj

-- 
The one who gets the last laugh isn't the one who did the laughing,
but rather the one who did the writing.

_______________________________________________
Paste-users mailing list
[email protected]
http://webwareforpython.org/cgi-bin/mailman/listinfo/paste-users

Reply via email to