@jwt_required декоратор не работает на конечной точке колбы - PullRequest
0 голосов
/ 09 октября 2019

У меня есть конечная точка Flask Blueprint, определенная как:

from flask_jwt import JWT, jwt_required, current_identity
my_api = Blueprint('MyApi', __name__)

@my_api.route("/MyApi", methods=['GET'])
@jwt_required()
def get_my_api():
    return make_response()

У меня есть конфигурация JWT, выполненная в основном файле конфигурации API (кроме файла, для которого конечная точка определена выше):

app = Flask(__name__)
app.register_blueprint(my_api)
jwt = JWTManager(app)

Так что, хотя я могу генерировать access_token и refresh_token, но при попадании в декоратор jwt_required я получаю следующее исключение:

File "/home/lib/python3.6/site-packages/flask/app.py", line 2446, in wsgi_app
    response = self.full_dispatch_request()
  File "/home/lib/python3.6/site-packages/flask/app.py", line 1951, in full_dispatch_request
    rv = self.handle_user_exception(e)
  File "/home/lib/python3.6/site-packages/flask_cors/extension.py", line 161, in wrapped_function
    return cors_after_request(app.make_response(f(*args, **kwargs)))
  File "/home/lib/python3.6/site-packages/flask/app.py", line 1820, in handle_user_exception
    reraise(exc_type, exc_value, tb)
  File "/home/lib/python3.6/site-packages/flask/_compat.py", line 39, in reraise
    raise value
  File "/home/lib/python3.6/site-packages/flask/app.py", line 1949, in full_dispatch_request
    rv = self.dispatch_request()
  File "/home/lib/python3.6/site-packages/flask/app.py", line 1935, in dispatch_request
    return self.view_functions[rule.endpoint](**req.view_args)
  File "/home/lib/python3.6/site-packages/flask_jwt/__init__.py", line 177, in decorator
    _jwt_required(realm or current_app.config['JWT_DEFAULT_REALM'])
  File "/home/lib/python3.6/site-packages/flask_jwt/__init__.py", line 152, in _jwt_required
    token = _jwt.request_callback()
  File "/home/lib/python3.6/site-packages/werkzeug/local.py", line 348, in __getattr__
    return getattr(self._get_current_object(), name)
  File "/home/lib/python3.6/site-packages/werkzeug/local.py", line 307, in _get_current_object
    return self.__local()
  File "/home/lib/python3.6/site-packages/flask_jwt/__init__.py", line 28, in <lambda>
    _jwt = LocalProxy(lambda: current_app.extensions['jwt'])
KeyError: 'jwt'

Я что-то не так делаю? Спасибо.

1 Ответ

1 голос
/ 09 октября 2019

Похоже, вы смешиваете два разных расширения. from flask_jwt import JWT, jwt_required, current_identity является расширением flask-jwt, а jwt = JWTManager(app) является расширением flask-jwt. Flask-jwt уже давно отменен, поэтому я бы рекомендовал использовать flask-jwt-extended в вашей кодовой базе: https://flask -jwt-extended.readthedocs.io / en / stable / basic_usage.html

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