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
переменная.
Я рекомендую поместить это в метод все же.