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-via-config-file 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. 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). Note that based on how the the default challenge decider is set up, the challenger is only initiated on receipt of an HTTP 401 status code. Unless you change the default behaviour of the decider it will not also trigger the challenge on 404s. See http://static.repoze.org/whodocs/narr.html#challenge-deciders. Anyhow, if you still are unable to determine what is wrong, you should provide more information (i.e configs, AUTH logger messages etc) about your setup then perhaps someone else may be able to help debug the problem further .. 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.htmlbut > it > 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 -~----------~----~----~----~------~----~------~--~---
