Автоматический выход из Django не обновляется в базе данных - PullRequest
0 голосов
/ 02 марта 2019

Я работаю над проектом с использованием Python (2.7) и Django (1.11), в котором мне нужно было реализовать автоматический выход из системы в течение нескольких минут или часов.

Примечание: Я много искал и изучал различные связанные вопросы, но не смог найти решения для моей конкретной проблемы, поэтому не помечайте его как дубликат, пожалуйста!

Я достиг этой цели, добавив некоторые настройки в settings.py как:

SESSION_COOKIE_AGE = 120
SESSION_SAVE_EVERY_REQUEST = True
LOGOUT_REDIRECT_URL = 'mainlogin'

Только для целей тестирования, я настроил его на 2 минуты.Через 2 минуты, когда я обновляю страницу, пользователь выходит из системы и перенаправляется на страницу входа, но в бэкэнде / базе данных статус пользователя по-прежнему active.

. Мне нужно использовать активных пользователей длядальнейшая обработка / выполнение, поэтому, если пользователь, вышедший из системы автоматически, не должен быть доступным, является активным пользователем, но это так.

Если я вышел из системы вручную, он больше не отображается у активного пользователя,это означает, что ручной выход из системы работает хорошо, но автоматический выход из системы по-прежнему показывает пользователя как active пользователя.

Вот как я получаю активных пользователей:

all_active_users = user_table.objects.filter(user_type='a', status=1, approval_status=1, is_active=True)
# further execution

Обновление: Я использую пользовательский режим для пользователя, который назван user_table, и вот что я попробовал в соответствии с предложенным ответом:

def get_all_logged_in_users():
    # Query all non-expired sessions
    # use timezone.now() instead of datetime.now() in latest versions of Django
    sessions = Session.objects.filter(expire_date__gte=timezone.now())
    uid_list = []

    # Build a list of user ids from that query
    for session in sessions:
        data = session.get_decoded()
        uid_list.append(data.get('id', None))

    # Query all logged in users based on id list
    return user_table.objects.filter(id__in=uid_list)

он возвращает пустой набор запросов как: active drivers are: <QuerySet []> даже пользователь типа driver вошел в систему.

Как я могу преодолеть эту проблему, поэтому, когда пользователь автоматически вышел из системы, он не будет отображаться в active пользователей.

1 Ответ

0 голосов
/ 02 марта 2019

Вы неправильно понимаете значение is_active.Это поле используется Django для определения, может ли пользователь разрешить вход в систему, а не в тот момент, когда он входил в систему в этот момент.

Даже если вы хотелисоздать собственное поле User для хранения этой информации было бы трудно, так как сессия истекает просто по прошествии времени.На сервере фактически ничего не происходит, что могло бы вызвать изменение в поле модели.

Итак, если вам нужно определить всех вошедших в систему пользователей, вам нужно использовать хранилище сеансов.Джанго не предлагает простой способ сделать это, но это, безусловно, возможно. Этот ответ показывает, как запросить таблицу Session, чтобы выяснить, кто вошел в систему.

...