Как я могу сделать пользовательскую проверку JWT с Flask и flask_jwt_extended?
Я хочу добавить дополнительную проверку к токену при вызове @jwt_required. Я хочу проверить одну из претензий. Могу ли я сделать это с помощью JWTManager?
В настоящее время мой код просто звонит:
jwt = JWTManager(app)
И я украшаю функции с: @jwt_required
2 ответа
Вдобавок ко всему, я хотел бы создать собственный декоратор jwt_required
,
Вот примерное представление о том, как это может выглядеть в документации functools.wraps:
from functools import wraps
from flask_jwt_extended import jwt_required
from flask_jwt_extended.view_decorators import _decode_jwt_from_request
from flask_jwt_extended.exceptions import NoAuthorizationError
def custom_validator(view_function):
@wraps(view_function)
def wrapper(*args, **kwargs):
jwt_data = _decode_jwt_from_request(request_type='access')
# Do your custom validation here.
if (...):
authorized = True
else:
authorized = False
if not authorized:
raise NoAuthorizationError("Explanation goes here")
return view_function(*args, **kwargs)
return jwt_required(wrapper)
@app.route('/')
@custom_validator
def index():
return render_template('index.html')
Здесь вы можете найти исходный код для jwt_required.
Разместите это в своем другом вопросе, но я опубликую это здесь также на случай, если другие натолкнутся на это.
Автор здесь. Что бы это ни стоило, flask-jwt также не поддерживает требование утверждений (хотя и говорит, что это так). https://github.com/mattupstate/flask-jwt/issues/98
РЕДАКТИРОВАТЬ: Это теперь доступно в flask-jwt-extended. https://github.com/vimalloc/flask-jwt-extended/issues/64
ура