Я использую библиотеку Flask JWT-Extended для реализации токенов доступа JWT. Когда токен пользователя истекает, является недействительным или не существует, то по умолчанию происходит то, что Flask возвращает JSON, например:
{"msg": "Missing cookie \"access_token_cookie\""}
Я хочу создать декоратор, который обернет @jwt_required
но выполняет внутреннее перенаправление (как на страницу входа в систему) вместо возврата JSON, как указано выше.
Вот примерный декоратор:
def redirect_if_error(view_function):
@wraps(view_function)
def wrapper(*args, **kwargs):
jwt_data = _decode_jwt_from_request(request_type='access')
# Do custom validation here.
if 'identity' in jwt_data:
authorized = True
else:
authorized = False
if not authorized:
return redirect('login', code=302)
return view_function(*args, **kwargs)
return jwt_required(wrapper)
и примерный маршрут страницы с защитой страницы, на который я бы хотел, чтобы Flask перенаправлял пользователя, если произойдет какая-либо ошибка токена:
@mod.route('/')
@redirect_if_error
def home():
return render_template("index.html")
Моя проблема в том, что я не могу понять, как переопределить возврат JSON по умолчанию с помощью перенаправления. Если есть какая-либо ошибка, логика вместо функции обтекания игнорируется, и выводится какое-то сообщение об ошибке.
Есть ли лучший способ переопределить поведение по умолчанию с помощью нового декоратора?