See inline.... On Jul 14, 12:10 pm, kochhar <[email protected]> wrote: > Hi, > > Thanks for the response. I think I've managed to get it working. > > > > afrotypa wrote: > > It will also likely help if you review the repoze.who configuration > > docs to get a good picture of how it works and how to set it up. > > >http://static.repoze.org/whodocs/narr.html > > > There are 2 options for configuring repoze.who described in that doc > > - > > > 1. via a config file (which you have chosen) > > >http://static.repoze.org/whodocs/narr.html#middleware-configuration-v... > > > 2. directly in python code (this is the option I use to setup > > repoze.who for my app) > > >http://static.repoze.org/whodocs/narr.html#module-repoze.who.middleware > > > Either method should work fine if properly setup. > > repoze.who is configured via a config file. I got it to work by moving the > abort > call out of BaseController and into my specific controller implementations. I
Great! I have the abort call in my controllers __before__ method which is where I also check if the user authenticated sucessfully. > think it's because the _inspect_call method which catches HTTPExceptions and > converts them into responses is in the WSGIController which is invoked from > BaseController. Since I raised the exception in BaseController before > WSGIController was invoked, I ended up with an error. > > Perhaps I should move the auth check into a __before__ method of the > BaseController. > That would enforce the same auth check accross all your controllers. Is that what you really want?. Perhaps you will gain more flexibility if you move the auth check into the __before__ method of each controller. Of course you will need to do this for all controllers if you go this route. > > Since the HTTPUnauthorized exception blew past the repoze middleware > > and percolated all the way up (or down depending on your view of the > > middleware stack) to the server, I suspect you havent set up > > authorization fully. The challenger plugin (a component of the > > repoze.who authentication middleware) ought to intercept the 401 and > > provide an authentication challenge (i.e. request the user to login > > e.g. via a form or whatever method you have set up to actuate the > > challenge). > > The challenge plugins in repoze.who are setup to handle 401 responses, not 401 > exceptions. That's probably why the exception percolates all the way up the > stack. > Ah. I see.!. You got to the bottom of this. good!. > Thanks again. > no problemo. > > On Jul 10, 2:43 pm, kochhar <[email protected]> wrote: > >> Hi all, > > >> I'm adding an authentication layer to my app and I'm trying to return an > >> error > >> using the abort() function. It is causing an Internal Server error (500) > >> instead > >> of returning a proper error response. I've tried with both abort(401) and > >> abort(404). debug is set to false in my app config. > > >> I found this irc > >> discussion:http://pylonshq.com/irclogs/%23pylons/%23pylons.2008-12-16.log.htmlbutit > >> didn't shed much light on the issue. FWIW, I'm using pylons 0.9.6.1 > > >> Below is the code which aborts and my middleware setup, the stack trace > >> from > >> paster is attached > > >> in lib/base.py: > >> class BaseController(WSGIController): > > >> def __call__(self, environ, start_response): > >> """Invoke the Controller""" > >> # WSGIController.__call__ dispatches to the Controller method > >> # the request is routed to. This routing information is > >> # available in environ['pylons.routes_dict'] > > >> identity = environ.get('repoze.who.identity') > >> if not identity or not identity.strip(): > >> abort(401) > > >> return WSGIController.__call__(self, environ, start_response) > > >> in config/middleware.py: > >> # Configure the Pylons environment > >> load_environment(global_conf, app_conf) > > >> # The Pylons WSGI app > >> app = PylonsApp() > > >> # CUSTOM MIDDLEWARE HERE (filtered by error handling middlewares) > >> auth_required = app_conf.get('auth_required', 'true') > >> if asbool(auth_required): > >> # create the repoze.who authentication middleware > >> app = make_who_with_config(app, global_conf, > >> app_conf['who.config_file'], > >> app_conf['who.log_file'], > >> app_conf.get('who.log_level', 'debug')) > > >> if asbool(full_stack): > >> # Handle Python exceptions > >> app = ErrorHandler(app, global_conf, > >> error_template=error_template, > >> **config['pylons.errorware']) > > >> # Display error documents for 401, 403, 404 status codes (and > >> # 500 when debug is disabled) > >> app = ErrorDocuments(app, global_conf, mapper=error_mapper, > >> **app_conf) > > >> # Establish the Registry for this application > >> app = RegistryManager(app) > > >> # Static files > >> javascripts_app = StaticJavascripts() > >> static_app = StaticURLParser(config['pylons.paths']['static_files']) > >> app = Cascade([static_app, javascripts_app, app]) > >> return app > > >> [traceback.txt4K ]Exception happened during processing of request from > >> ('127.0.0.1', 44090) > >> Traceback (most recent call last): > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/httpserver.py", > >> line 1068, in process_request_in_thread > >> self.finish_request(request, client_address) > >> File "/opt/lib/python2.6/SocketServer.py", line 320, in finish_request > >> self.RequestHandlerClass(request, client_address, self) > >> File "/opt/lib/python2.6/SocketServer.py", line 615, in __init__ > >> self.handle() > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/httpserver.py", > >> line 442, in handle > >> BaseHTTPRequestHandler.handle(self) > >> File "/opt/lib/python2.6/BaseHTTPServer.py", line 329, in handle > >> self.handle_one_request() > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/httpserver.py", > >> line 437, in handle_one_request > >> self.wsgi_execute() > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/httpserver.py", > >> line 287, in wsgi_execute > >> self.wsgi_start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/urlmap.py", > >> line 202, in __call__ > >> return app(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/cascade.py", > >> line 130, in __call__ > >> return self.apps[-1](environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/registry.py", > >> line 375, in __call__ > >> app_iter = self.application(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/recursive.py", > >> line 84, in __call__ > >> return middleware(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/recursive.py", > >> line 47, in __call__ > >> return self.app(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/errordocument.py", > >> line 84, in __call__ > >> return self.app(environ, keep_status_start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/recursive.py", > >> line 80, in __call__ > >> return self.application(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/errordocument.py", > >> line 185, in __call__ > >> app_iter = self.application(environ, change_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Paste-1.7.3dev_r7858-py2.6.egg/paste/exceptions/errormiddleware.py", > >> line 138, in __call__ > >> return self.application(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/repoze.who-1.0.13-py2.6.egg/repoze/who/middleware.py", > >> line 107, in __call__ > >> app_iter = app(environ, wrapper.wrap_start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Pylons-0.9.6.1-py2.6.egg/pylons/wsgiapp.py", > >> line 315, in __call__ > >> return self.app(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Beaker-0.7.5-py2.6.egg/beaker/cache.py", > >> line 180, in __call__ > >> return self.app(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Beaker-0.7.5-py2.6.egg/beaker/session.py", > >> line 405, in __call__ > >> response = self.wrap_app(environ, session_start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Routes-1.10.1-py2.6.egg/routes/middleware.py", > >> line 118, in __call__ > >> response = self.app(environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Pylons-0.9.6.1-py2.6.egg/pylons/wsgiapp.py", > >> line 95, in __call__ > >> response = self.dispatch(controller, environ, start_response) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Pylons-0.9.6.1-py2.6.egg/pylons/wsgiapp.py", > >> line 237, in dispatch > >> return controller(environ, start_response) > >> File "/home/kochhar/workspace/argus-trunk/argus/lib/base.py", line 25, > >> in __call__ > >> abort(401) > >> File > >> "/home/kochhar/workspace/argus-trunk/_install/lib/python2.6/site-packages/Pylons-0.9.6.1-py2.6.egg/pylons/controllers/util.py", > >> line 63, in abort > >> raise exc > >> HTTPUnauthorized: 401 Unauthorized > >> This server could not verify that you are authorized to > >> access the document you requested. Either you supplied the > >> wrong credentials (e.g., bad password), or your browser > >> does not understand how to supply the credentials required. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
