@JWT_Required Обработка исключений декоратора

Я использую API аутентификации с использованием JWT, и он отлично работает. Этот API используется для авторизации пользователей в моем веб-приложении. Чтобы это работало, я сохраняю JWT access_tokens как cookie вручную с помощью Flask. Я защищаю свой ресурс с помощью декоратора @JWT_required, и если я попытаюсь получить доступ к защищенному ресурсу с действующим токеном, все будет работать нормально. Однако, если токен доступа отсутствует или недействителен / истек, я получаю сообщение JSON:

{
      "message": "Missing cookie \"access_token_cookie\""
}

Это, очевидно, правильное сообщение, но вместо этого отображается JSON, который я хочу перенаправить на соответствующую страницу ошибки кода состояния, предоставляемую Flask - в данном случае 401.

  • Я пробовал добавить обработку ошибок для Flask и JWT Manager.
  • Пользовательский декоратор, хотя я плохо играл с ним, так как считаю, что должно быть решение в FLASK-JWT-extended.
@app.route('/dashbord')
@jwt_required
def dashbord():
    return render_template('dashbord.html', title='Home')

Моя цель - перенаправить на соответствующую страницу ошибки 404, 403, 401, если что-то не так с токеном доступа.

РЕШЕНИЕ:

@jwt.unauthorized_loader
def my_invalid_token_callback(expired_token):
    return render_template('401.html', title='Home')

person Benjo    schedule 07.09.2019    source источник


Ответы (2)


Вот решение, которое Бенджо опубликовал в конце своего вопроса:

@jwt.unauthorized_loader
def my_invalid_token_callback(expired_token):
    return render_template('401.html', title='Home')
person Nathan Wailes    schedule 08.04.2020

Вот документация по изменению результатов для недопустимых токенов: https://flask-jwt-extended.readthedocs.io/en/stable/changing_default_behavior.html#changing-callback-functions

person vimalloc    schedule 07.09.2019
comment
Спасибо за вашу помощь. Я нашел эту часть документации ранее и поигрался с ней. Однако я не смог найти нужный. Что я могу использовать для @JWT_requried? - person Benjo; 07.09.2019
comment
Спасибо за совет. Нашел правильный: @ jwt.unauthorized_loader def my_invalid_token_callback (expired_token): #token_type = expired_token ['type'] '' 'return jsonify ({' status ': 401,' sub_status ': 42,' msg ':' The { } срок действия токена истек'.format (token_type)}), 401 '' 'return render_template (' 401.html ', title =' Home ') - person Benjo; 07.09.2019