Как мне обрабатывать исключения, возникающие в декораторе @jwt_required? (в колбе-jwt-расширенной)

У меня есть функция с @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. Как я должен обработать исключение более изящно?

1 ответ

Решение

Flask-jwt-extended должен обрабатывать их для вас изящно. Если нет, вы, вероятно, используете другое расширение (например, фляга-restful), которое нарушает функциональность фляжки. Вы можете попробовать установить эту опцию, чтобы исправить это app.config[‘PROPAGATE_EXCEPTIONS’] = Trueили обратитесь к этой ветке за советом, если вы используете другое расширение фляги, которое вызывает проблемы https://github.com/vimalloc/flask-jwt-extended/issues/86

Другие вопросы по тегам