flask-jwt-extended все время выдает один и тот же токен для запросов / входа - PullRequest
0 голосов
/ 25 сентября 2018

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 ]

0 голосов
/ 01 октября 2018

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

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

0 голосов
/ 25 сентября 2018

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

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

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

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

...