flask-jwt-extended постоянно выдает один и тот же токен для запросов / входа в систему.

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

2 ответа

Решение

WSGIPass Авторизация включена.

Я добавил эту директиву в конфигурационный файл wsgi мод Apache. Это начало работать как ожидалось.

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

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

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

Я рекомендую поместить это в метод все же.

Другие вопросы по тегам