Jwt-flask-extended всегда отправляет один и тот же токен доступа любому пользователю. Я интегрировал Flask с apache. Используется Python 2.7.5, операционная система - Red Hat Enterprise Linux Server версии 7.3 (Maipo). Найдите код ниже.

    app = Flask(__name__)
    CORS(app)

    @app.before_request
    def log_request_info():
            app.logger.debug('Headers: %s', request.headers)
            app.logger.debug('Body: %s', request.get_data())

    mysql = MySQL()

    # MySQL configurations
    app.config['MYSQL_DATABASE_USER'] = 'user'
    app.config['MYSQL_DATABASE_PASSWORD'] = 'password'
    app.config['MYSQL_DATABASE_DB'] = 'userdb'
    app.config['MYSQL_DATABASE_HOST'] = 'mysql-host'

    mysql.init_app(app)

    # Setup the Flask-JWT-Extended extension
    app.config['JWT_SECRET_KEY'] = 'Changeit'  # Change this! if needed
    app.config['JWT_EXPIRATION_DELTA'] = timedelta(seconds=28800)
    jwt = JWTManager(app)

    @app.route('/auth/token', methods=['POST'])
    def login():
        if not request.is_json:
           return jsonify({"msg": "Missing JSON in request"}), 400

        uid = request.json.get('uid', None)
        username = request.json.get('username', None)

        if not uid:
            return jsonify({"msg": "Missing required parameter"}), 400
        if not username:
            return jsonify({"msg": "Missing required parameter"}), 400

        # Identity can be any data that is json serializable
        access_token = create_access_token(identity=uid)
        return jsonify(access_token=access_token), 200
0
sandy r 25 Сен 2018 в 08:25

2 ответа

Лучший ответ

WSGIPassAuthorization On.

Я добавил эту директиву в файл конфигурации Apache mod wsgi. Все заработало как положено.

0
sandy r 1 Окт 2018 в 18:00

Это потому, что вы используете глобальные переменные, которые не являются потокобезопасными.

Ваша переменная токена доступа должна находиться внутри функции или метода.

Если вы все еще хотите, чтобы он был доступен глобально, вы можете использовать пакет Werkzeug local вместе с переменной Flask g.

Тем не менее, я рекомендую поместить это в метод.

0
Charming Robot 25 Сен 2018 в 06:30