flask-jwt-extended - Поймать повышение RevokedTokenError ('Токен отозван')

Я уже пробовал читать документы, а также попробовать изменение поведения по умолчанию https://flask-jwt-extended.readthedocs.io/en/latest/changing_default_behavior.html, чтобы обработать ошибку (ссылка показывает, как обрабатывать просроченный токен) и искать в Google все в каждой комбинации ключевых слов, которую я мог сделать но, похоже, ни у кого нет примера по этому поводу.

Я попытался использовать @ jwt.revoked_token_loader для обработки RevokedTokenError, но, похоже, он не работает, поскольку я применил его вот так

    @jwt.revoked_token_loader
        def revoked_token_response(revoked_token):
            jwtkn = revoked_token['jti']
            return jsonsify({
                'msg': 'token {} already been revoked!'.format(jwtkn)
            )}, 401

на самом деле, я точно не знаю, как в примере ссылки для обработки истекших токенов был параметр «expired_token», это самообъявление похоже на то, что я сделал выше для «revoked_token»? Насколько я знаю, jti похоже на значение по умолчанию в пакете flask-jwt-extended, поскольку я вижу ошибку всякий раз, когда я не использую это (в моем db это другое, но нет никаких проблем.

Я пробовал следовать этому руководству, и он отлично работает на моей стороне (как и его исходный код), но я вижу, что у этого нет исключения перехвата также на Revoke Tokens https://codeburst.io/jwt-authorization-in-flask-c63c1acf4eeb

Я использую почтальон, и если на основе ссылки на учебник, вот как я получаю это

    i do login
    i use the access token generated to access protected routes ('/secrets')
    i do logout
    i use again the access token generated to access protected routes

после последнего я получаю эту ошибку на стороне моего сервера (ide):

    ....flask_jwt_extended\utils.py", line 216, in verify_token_not_blacklisted
        raise RevokedTokenError('Token has been revoked')
    flask_jwt_extended.exceptions.RevokedTokenError: Token has been revoked
    127.0.0.1 -- [02/Jul/2019 22:25:26] "GET /secrets HTTP/1.1" 500 -

в почтальоне вот что я получаю:

    {
        'message': 'Internal Server Error'
    }

моя цель - отправить собственный ответ json вместо «Внутренняя ошибка сервера»

edit: Я не специалист в программировании или что-то в этом роде, новичок, который хотел попрактиковаться в Python в безопасной веб-разработке. Я еще не совсем понимаю, как работает декоратор с точки зрения приложения и т.д., поэтому я не знаю, настраивают ли другие пакет flask-jwt-extended для решения таких задач.


person Mheruian    schedule 02.07.2019    source источник


Ответы (1)


Возврат ошибки 500 обычно происходит из-за ошибки в других расширениях фляги и из-за того, как она взаимодействует с собственными обработчиками ошибок фляги. Вы можете найти множество обсуждений по этому поводу здесь (https://github.com/vimalloc/flask-jwt-extended/issues/86), но в версии tl; dr вам может потребоваться установить app.config['PROPAGATE_EXCEPTIONS'] = True, если вы используете что-то вроде Flask-Restul, или использовать подобный хак при использовании flask-restplus :

jwt = JWTManager(app)
api = Api()
jwt._set_error_handler_callbacks(api)

Если это вам не помогает, просмотрите связанную проблему с github, и, если там ничего не помогает, дайте ответ по этой проблеме с подробным описанием вашей настройки.

Ваше здоровье.

person vimalloc    schedule 02.07.2019
comment
Эй ?! это так здорово! Я действительно не ожидал, что вы это рассмотрите! хахаха! Большое спасибо за ответ, Ага! я действительно использовал Flask-Restful, и 'app.config [' PROPAGATE_EXCEPTION '] = True' определенно работает для меня. Еще раз спасибо, я не знал, что в пакете есть проблемы с конфликтами в других пакетах, поэтому я не изучал его. Спасибо за хороший сон :) - person Mheruian; 02.07.2019
comment
Безусловно, я рад, что помогло! :) Глупо, что что-то, что часть core flask ломается в flask-restful или flask-restplus, но, увы, я мало что могу с этим поделать с помощью моего расширения. В этих проектах есть некоторые проблемы с github, описывающие ошибку, поэтому, надеюсь, они в конечном итоге исправят свои вещи, и это будет более плавный опыт. - person vimalloc; 02.07.2019