2 votes

Utilisation de callbacks flask-jwt-extended avec flask-restful et create_app

J'essaie de créer des jetons d'API pour mon API flask avec flask-jwt-extended. J'essaie d'initialiser le token_in_blacklist_loader mais je n'arrive pas à trouver la bonne façon de le faire.

Le problème est que token_in_blacklist_loader est implémenté comme un décorateur. Il est censé être utilisé de la manière suivante :

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

^ à partir des documents ici

jwt est défini comme suit :

jwt = JWTManager(app)

Mais si vous utilisez le create_app le motif, alors jwt est cachée à l'intérieur d'une fonction, et ne peut pas être utilisée dans la portée globale des décorateurs.

Quelle est la meilleure façon de résoudre ce problème ?

2voto

kyeana Points 356

Mettez le JWTManager dans un autre fichier, et l'initialiser avec la fonction jwt.init_app fonction

A titre d'exemple, voir :

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

y

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

1voto

BlackSheep Points 1414

Ce que j'ai fini par faire, c'est de placer le gestionnaire à l'intérieur du fichier create_app comme ça :

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:
        ...

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X