我的Flask应用程序中有一个中间件,用于验证请求头中的JSON Web令牌,并正在检查以验证它,下面是我的中间件类:
class AuthMiddleware(object):
def __init__(self, app):
self.app = app
def __call__(self, environ, start_response):
path = environ.get('PATH_INFO')
if path != '/authenticate' or path != '/token':
token = environ.get('HTTP_X_ACCESS_TOKEN')
verfied_token = verify_token(token)
if verfied_token is False:
abort(401)
elif verfied_token is True:
# payload = get_token_payload(token)
# check_permissions(payload)
pass
return self.app(environ, start_response)
verify_token()
是一个返回True或False的函数,如果它返回False,我希望它以错误401中止。但是,它会因错误500而中止:
在我看来,我应该取消401计划,但现在看来这是个问题。我该怎么办?在
您展示的中间件运行一些其他代码,然后调用包装好的Flask应用程序。但是,
abort
引发了Flask处理的异常,但WSGI不直接处理这些异常。因为您还不在Flask应用程序中,所以它无法处理异常。在一个更简单的方法是在烧瓶应用程序中进行检查。创建一个
before_request
处理程序,它与中间件基本相同,只是可以使用flask.request
,而不需要自己解析路径和头。在如果您想使用WSGI中间件来实现这一点,您需要自己创建响应。方便地说,Werkzeug的异常行为类似于WSGI应用程序,因此使用它们很简单。在
^{pr2}$您还可以使用
abort
,方法是捕捉它引发的异常(这也是WSGI应用程序)。在相关问题 更多 >
编程相关推荐