5

我正在尝试使用 flask-jwt-extended 为我的烧瓶 API 创建 API 令牌。我正在尝试初始化token_in_blacklist_loader但无法找出正确的方法。

问题在于它token_in_blacklist_loader是作为装饰器实现的。它应该以下列方式使用:

@jwt.token_in_blacklist_loader
def check_if_token_in_blacklist(decrypted_token):
    jti = decrypted_token['jti']
    return jti in blacklist

^来自这里的文档

其中jwt定义为:

jwt = JWTManager(app)

但是如果使用该create_app模式,那么jwt变量会隐藏在函数中,并且不能在装饰器的全局范围内使用。

解决此问题/解决此问题的正确方法是什么?

4

2 回答 2

3

我最终做的是将处理程序放在create_app这样的内部:

def create_app(name: str, settings_override: dict = {}):
    app = Flask(name, ...)
    ...
    jwt = JWTManager(app)
    @jwt.token_in_blacklist_loader
    def check_token_in_blacklist(token_dict: dict) -> bool:
        ...
于 2018-03-02T20:16:30.593 回答
2

将其放入JWTManager不同的文件中,并使用函数对其进行jwt.init_app初始化

例如,请参阅:

https://github.com/vimalloc/flask-jwt-extended/blob/master/examples/database_blacklist/extensions.py

https://github.com/vimalloc/flask-jwt-extended/blob/master/examples/database_blacklist/app.py

于 2018-03-01T03:27:54.993 回答