1

我已经尝试阅读文档以及尝试更改默认行为https://flask-jwt-extended.readthedocs.io/en/latest/sharing_default_behavior.html来处理错误(链接显示如何处理过期令牌)和在谷歌搜索我可以做的每个关键字组合中的所有内容,但似乎没有人有这方面的例子。

我尝试使用@jwt.revoked_token_loader 来处理 RevokedTokenError 但它似乎不起作用,因为我像这样应用它

    @jwt.revoked_token_loader
        def revoked_token_response(revoked_token):
            jwtkn = revoked_token['jti']
            return jsonsify({
                'msg': 'token {} already been revoked!'.format(jwtkn)
            )}, 401

实际上,我不确切知道处理过期令牌的链接上的示例如何具有“expired_token”参数,这种自我声明是否像我在上面对“revoked_token”所做的那样?据我所知,'jti' 就像 flask-jwt-extended 包中的默认值,因为每当我不使用它时我都会看到错误(在我的数据库中,它是不同的,但根本没有问题。

我尝试按照本教程进行操作,并且对我来说效果很好(以及他的原始代码源),但我发现这个在 Revoke Tokens https://codeburst.io/jwt-authorization-上也没有捕获异常在烧瓶中-c63c1acf4eeb

我使用邮递员,如果基于教程链接,这就是我得到这个的方法

    i do login
    i use the access token generated to access protected routes ('/secrets')
    i do logout
    i use again the access token generated to access protected routes

在最后一个之后,我在服务器端(ide)收到此错误:

    ....flask_jwt_extended\utils.py", line 216, in verify_token_not_blacklisted
        raise RevokedTokenError('Token has been revoked')
    flask_jwt_extended.exceptions.RevokedTokenError: Token has been revoked
    127.0.0.1 -- [02/Jul/2019 22:25:26] "GET /secrets HTTP/1.1" 500 -

在邮递员中,这就是我得到的:

    {
        'message': 'Internal Server Error'
    }

我的目标是发送自定义 json 响应而不是“内部服务器错误”

编辑:我不是编程等方面的奇才,是一个想要练习 Python 安全 Web 开发的初学者。我还不太明白装饰器在应用程序等方面是如何工作的,所以我不知道其他人是否调整了 flask-jwt-extended 包来解决这些问题。

4

1 回答 1

3

恢复 500 错误通常是由于其他烧瓶扩展中的错误以及它与本机烧瓶错误处理程序的交互方式。你可以在这里找到一堆关于它的讨论(https://github.com/vimalloc/flask-jwt-extended/issues/86app.config['PROPAGATE_EXCEPTIONS'] = True ),但是如果使用像 Flask 这样的东西,你可能需要设置 tl;dr 版本Restul,或者如果使用flask-restplus,则使用这样的hack:

jwt = JWTManager(app)
api = Api()
jwt._set_error_handler_callbacks(api)

如果这些对您没有帮助,请查看链接的 github 问题,如果没有任何内容有助于在该问题中回复详细说明您的设置。

干杯。

于 2019-07-02T15:49:58.840 回答