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

标签 python jwt flask-jwt-extended

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

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

当设置了正确的 HTTP header 时,它工作正常,即

身份验证:承载 [TOKEN]

但是当 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

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

最佳答案

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

关于python - 我应该如何处理 @jwt_required 装饰器中引发的异常? (在 flask-jwt-extended 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54648603/

相关文章:

flask - 手动验证flask-extended-jwt的访问 token

python - 将 Jython 与 Django 结合使用

python - 如何编写代码来获取 python 列表中每个列表的最低值?

python - kivy.uix.screenmanager.ScreenManagerException : ScreenManager accepts only Screen widget

python - 一起使用可变长度参数列表和命名参数

swift - 如何在允许 JWT 刷新的同时检查 Swift 中的 Auth 用户?

ruby-on-rails - JWT 如何注销

base64 - 在 Charles Proxy 中自动解码 JWT token

flask - "Not enough segments"发送带有 Bearer Token Authorization Header (flask_restful + flask_jwt_extended) 的 GET 消息时

python - 在flask-restful 和create_app 中使用flask-jwt-extended 回调