Как я могу сделать пользовательскую проверку 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

ура

Другие вопросы по тегам