flask-jwt-extended - повышенное значение RevokedTokenError ('токен был отозван') - PullRequest
0 голосов
/ 02 июля 2019

Я уже пробовал читать документы, а также попробовать изменить поведение по умолчанию https://flask -jwt-extended.readthedocs.io / en / latest / change_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, так как я вижу ошибку всякий раз, когда я не использую это (в моей базе данных оно отличается, но проблем вообще нет.

Я пытался следовать этому уроку, и он отлично работает на моей стороне (также как и его исходный код), но я вижу, что у этого нет исключения ловушки также на 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 вместо 'Internal Server Error'

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

1 Ответ

0 голосов
/ 02 июля 2019

Возвращение ошибки 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, и, если ничего не поможет, ответьте в этой проблеме, подробно описав ваши настройки.

Приветствия.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...