我该如何处理@jwt_required装饰器中引发的异常? (在flask-jwt-extended中)

问题描述 投票:0回答:1

我有一个@jwt_required装饰器的函数。

class Test(Resource):
    @jwt_required
    def get(self):
        return {"test": "ok" }

在设置正确的HTTP标头时工作正常,即

Authentication: Bearer [TOKEN]

但是当令牌无效/错误或搞乱时,会引发jwt.exceptions.DecodeError:

File "env/lib/python3.6/site-packages/flask_restplus/resource.py", line 44, in dispatch_request
    resp = meth(*args, **kwargs)
  File "env/lib/python3.6/site-packages/flask_jwt_extended/view_decorators.py", line 103, in wrapper
    verify_jwt_in_request()
  File "env/lib/python3.6/site-packages/flask_jwt_extended/view_decorators.py", line 32, in verify_jwt_in_request
    jwt_data = _decode_jwt_from_request(request_type='access')
  File "env/lib/python3.6/site-packages/flask_jwt_extended/view_decorators.py", line 267, in _decode_jwt_from_request
    decoded_token = decode_token(encoded_token, csrf_token)
  File "env/lib/python3.6/site-packages/flask_jwt_extended/utils.py", line 80, in decode_token
    encoded_token, verify=False, algorithms=config.algorithm
  File "env/lib/python3.6/site-packages/jwt/api_jwt.py", line 84, in decode
    payload, _, _, _ = self._load(jwt)
  File "env/lib/python3.6/site-packages/jwt/api_jws.py", line 183, in _load
    raise DecodeError('Not enough segments')
jwt.exceptions.DecodeError: Not enough segments

我总是不能依赖客户始终使用正确的令牌。我无法捕获异常,因为它是在装饰器而不是我自己的函数中引发的。结果是http 500错误。我该如何更优雅地处理异常?

python jwt flask-jwt-extended
1个回答
2
投票

Flask-jwt-extended应该优雅地为您处理。如果没有,你可能正在使用另一个扩展(例如烧瓶 - 例如烧瓶),它正在打破本机烧瓶功能。您可以尝试设置此选项以修复它app.config[‘PROPAGATE_EXCEPTIONS’] = True,或者如果您使用导致问题的不同烧瓶扩展,请查看此线程以获取一些建议https://github.com/vimalloc/flask-jwt-extended/issues/86

© www.soinside.com 2019 - 2024. All rights reserved.