Flask Безопасность чтения неверных данных из облака SQL - PullRequest
0 голосов
/ 10 марта 2020

Я использую Flask -Security для управления аутентификацией пользователя для веб-приложения в App Engine. Для базы данных пользователей с Flask -Security я использую Cloud SQL. По некоторым причинам, когда он читает из БД, он иногда читает пользователей, которые были удалены, или пропускает некоторых пользователей, которые там находятся. Например, если в базе данных есть пользователи A, B и C, и я удаляю пользователя C, даже тогда C будет прочитано. Или, если я создаю пользователя D, D не будет считываться из базы данных.

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

def get_users():
    users = User.query.all()
    user_data = list()
    for user in users:
        elem = dict()
        if user.id == int(session['user_id']):
            continue
        elem['name'] = user.name
        elem['email'] = user.email
        elem['role'] = user.roles[0].name
        elem['language_pref'] = user.language_pref
        user_data.append(elem)
    return user_data

После удаления или создания пользователя я экспортировал данные из облака SQL, чтобы проверить, был ли пользователь успешно удален / создан, и обнаружил, что обе функции работают правильно.

Настройки Flask -Security точно такие же, как описано здесь , за исключением объекта механизма в database.py. Код объекта движка:

engine = create_engine(
    engine.url.URL(
        drivername='mysql+pymysql',
        username="USER",
        password="PASSWORD",
        database='userdb',
        query={
            'unix_socket': '/cloudsql/{}'.format("INSTANCE_CONNECTION_NAME")
        }
    ),
)

Вышеуказанная ошибка возникает только при запуске приложения на App Engine. Если я запускаю его локально с облачным прокси sql, он работает отлично. И если я отключаю и перезапускаю приложение, оно снова правильно читает базу данных, пока я не добавлю или не удаляю пользователя, а затем снова начнет показывать старые данные.

Я предположил, что это была какая-то проблема с кэшированием, а в этот вопрос, один из ответов, который сказал, чтобы установить уровень изоляции "ЧИТАТЬ НЕОБЕСПЕЧЕННЫЙ", который работал для меня. Но я не понимаю, почему я должен установить уровень изоляции «ЧИТАТЬ НЕОБЕСПЕЧЕННЫЙ», чтобы он работал правильно, даже если все данные правильно зафиксированы.

Может кто-нибудь объяснить мне, почему это происходит?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...