在 flask-restful 和 create_app 中使用 flask-jwt-extended 回调
Using flask-jwt-extended callbacks with flask-restful and create_app
我正在尝试使用 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
变量隐藏在一个函数中,并且不能在装饰器的全局范围内使用。
解决这个问题/解决这个问题的正确方法是什么?
将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
我最终做的是将处理程序放入 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:
...
我正在尝试使用 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
变量隐藏在一个函数中,并且不能在装饰器的全局范围内使用。
解决这个问题/解决这个问题的正确方法是什么?
将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
我最终做的是将处理程序放入 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:
...