flask_jwt_extended ExpiredSignatureError для jwt_required украшенных методов - PullRequest
0 голосов
/ 25 февраля 2019

Я использую flask_jwt_extended с бэкэндом jsonrpc для Flask.

Фабрика приложений:

import os
from flask import Flask, jsonify, make_response, request
from flaskr.db import db
from flask_migrate import Migrate
from jsonrpc.backend.flask import api as apibackend
import flaskr.models
from flask_jwt_extended import JWTManager
from flask_jwt_extended import (
    create_access_token, get_jwt_identity, jwt_required
)


def create_app(tests=None):
    app = Flask(__name__, instance_relative_config=True)
    if tests is None:
        if os.environ.get("FLASK_ENV") == "production":
            app.config.from_object('flaskr.config.ProdConfig')
        else:
            app.config.from_object('flaskr.config.DevConfig')
    else:
        app.config.from_object('flaskr.config.TestingConfig')

    # DB & Migrations
    db.init_app(app)
    app.db = db
    migrate = Migrate(app, db)

    # RPC
    jwt = JWTManager(app)
    app.add_url_rule('/api', 'api', apibackend.as_view(), methods=['POST'])

    # Instance
    try:
        os.makedirs(app.instance_path)
    except OSError:
        pass

    # errors as json
    @app.errorhandler(404)
    @app.errorhandler(403)
    @app.errorhandler(410)
    @app.errorhandler(405)
    def page_not_found(e):
        return make_response(jsonify({
            'error': e.name,
            'description': e.description,
        }), e.code)

    # generic rout for debug
    @app.route('/generic', methods=['GET', 'POST'])
    def hello():
        return request.headers.get('Authorization')

    from jsonrpc.backend.flask import api as api_back
    @api_back.dispatcher.add_method(name="auth.refresh")
    @jwt_required
    def refresh(**kwargs):
        current_user = get_jwt_identity()
        current_user = User.query.filter_by(username=current_user).first()
        if current_user:
            return create_access_token(identity=current_user.getIdentity())
        return False

    return app

Когда я вызываю 'auth.refresh' ExpiredSignatureError поднято.

Я пытался использовать @ jwt_required_optional декоратор, get_jwt_identity всегда возвращает ноль.Но когда я отправляю сообщение на / generic , я вижу свой токен на предъявителя.Это означает, что мои заголовки в порядке, JWTManager не может «увидеть» запрос или неправильно загружен.

flask == 1.0.2 flask-jwt-extended == 3.17.0

...