Flask jwt和Flask resftul错误处理
我正在使用和 这就是flask jwt处理错误的方式(取自其github repo),但没有一个允许我获取JWTError的参数Flask jwt和Flask resftul错误处理,flask,flask-restful,flask-jwt,Flask,Flask Restful,Flask Jwt,我正在使用和 这就是flask jwt处理错误的方式(取自其github repo),但没有一个允许我获取JWTError的参数 if auth is None: raise JWTError('Authorization Required', 'Authorization header was missing', 401, { 'WWW-Authenticate': 'JWT realm="%s"' % realm }) parts =
if auth is None:
raise JWTError('Authorization Required', 'Authorization header was missing', 401, {
'WWW-Authenticate': 'JWT realm="%s"' % realm
})
parts = auth.split()
if parts[0].lower() != auth_header_prefix.lower():
raise JWTError('Invalid JWT header', 'Unsupported authorization type')
elif len(parts) == 1:
raise JWTError('Invalid JWT header', 'Token missing')
elif len(parts) > 2:
raise JWTError('Invalid JWT header', 'Token contains spaces')
try:
handler = _jwt.decode_callback
payload = handler(parts[1])
except SignatureExpired:
raise JWTError('Expired JWT', 'Token is expired', 401, {
"WWW-Authenticate": 'JWT realm="{0}"'.format(realm)
})
except BadSignature:
raise JWTError('Invalid JWT', 'Token is undecipherable')
_request_ctx_stack.top.current_user = user = _jwt.user_callback(payload)
if user is None:
raise JWTError('Invalid JWT', 'User does not exist')
下面是我处理JWTError的不同方法
在烧瓶中:
def handle_user_exception_again(e):
if isinstance(e, JWTError):
data = {'status_code': 1132, 'message': "JWTError already exists."}
return jsonify(data), e.status_code, e.headers
return e
app.handle_user_exception = handle_user_exception_again
瓶中restful(句柄错误)
烧瓶内restful(错误\u路由器)
我看到您正试图从这些错误中引发HTTPException,这有助于将它们返回给用户。要引发HTTP异常,可以捕获所有错误,如果它们是JWTError的实例,则可以使用如下函数将它们转换为HTTPException的实例:
def convert_to_http_exception(e):
if isinstance(e, JWTError):
jwtdescription = e.error + ": " + e.description
http_exception = HTTPException(description=jwtdescription)
http_exception.code = e.status_code
return http_exception
else:
return e
很好的总结,但你的问题是什么?
class FlaskRestfulJwtAPI(Api):
def error_router(self, original_handler, e):
print(type(e))
if e is JWTError:#KeyError:
data = {
"code":400,
"message":"JWTError"
}
return jsonify(data), 400
elif isinstance(e,KeyError):
data = {
"code":400,
"message":"KeyError"
}
return jsonify(data), 400
else:
return super(FlaskRestfulJwtAPI, self).error_router(original_handler, e)
def convert_to_http_exception(e):
if isinstance(e, JWTError):
jwtdescription = e.error + ": " + e.description
http_exception = HTTPException(description=jwtdescription)
http_exception.code = e.status_code
return http_exception
else:
return e