Разрешить только один одновременный вход для пользователя в приложении django

возможно ли разрешить только один одновременный вход для пользователя в приложении django? если да, как вы подходите?

  • Ошибка «Слишком много переменных SQL» в django witih sqlite3
  • Невозможный lookbehind с обратной рецензией
  • Построение ориентированных графов в Python таким образом, чтобы показать все ребра отдельно
  • Частотные таблицы в пандах (например, plyr в R)
  • Интерполяция Python ConfigParser из иностранного раздела
  • Pandas DataFrame: преобразование фрейма с использованием уникальных значений столбца
  • Процедура nltk дает << raise URLError ('неизвестный тип url:% s'% type) >> в python
  • Как добавить с помощью кортежей
  • 4 Solutions collect form web for “Разрешить только один одновременный вход для пользователя в приложении django”

    Этот вопрос в основном отвечает здесь (stackoverflow.com).

    Мне это нужно в моих приложениях, поэтому я создал пакет django, который теперь находится на pypi (pip install django-preventconcurrentlogins).

    Пакет основан на фрагменте peterdemin: https://gist.github.com/peterdemin/5829440

    Надеюсь, это поможет кому-то в будущем.

    Вам нужно создать некоторую модель, которая сохраняет session_key для каждого пользователя. И создайте промежуточное программное обеспечение, которое проверяет ключ сеанса в этой модели для каждого пользователя – если он не равен запросу.session_key – чем удаляет этот сеанс (= пользователь logout, позволяющий оставаться только текущим )

    #models.py class Visitor(model.model): user = models.OneToOneField(User) session_key = models.CharField(null=True, blank=True) #and you need to setup signal catching from User model - so for each User Visitor is created #middleware.py class OnlyOneUserMiddleware(object): def process_request(self, request): cur_session_key = request.user.visitor.session_key if cur_session_key and cur_session_key != request.session.session_key: Session.objects.get(session_key=cur_session_key).delete() #the following can be optimized(do not save each time if value not changed) request.user.visitor.session_key = request.session.session_key request.user.visitor.save() 

    Я собираюсь предположить, что вы имеете в виду вход в систему сразу, а не один «логин» одновременно.

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

    Например, если в вашей базе данных есть таблица пользователей, добавьте поле «session_id», а затем, когда пользователь войдет в систему, установите его в свой текущий session_id. На каждой загрузке страницы проверьте, соответствует ли текущий сеанс сеансу session_id в таблице users. Помните, когда вы обновляете свой session_id в своем приложении, вам необходимо обновить базу данных, чтобы они не выходили из системы.

    Некоторые люди, когда пользователь входит в систему, просто сохраняют все данные пользователей в сеансе и никогда не переадресуют базу данных при загрузке новой страницы. Поэтому для некоторых этот «лишний» SQL-запрос может показаться неправильным. Для меня я всегда делаю новый запрос на каждую загрузку страницы, чтобы повторно аутентифицировать пользователя и убедиться, что их учетная запись не была удалена / приостановлена ​​и чтобы их комбинация имени пользователя и пароля осталась прежней. (Что, если кто-то из другого места изменил пароль или администратор?)

    Interesting Posts

    Как проверить пароль Windows с помощью cmd или python?

    DISTINCT ON в django

    Добавить строку в начало каждого значения в указанном столбце фрейма данных pandas (элегантно)

    Как вызывать pyspark в режиме отладки?

    Как я могу повысить эффективность цикла в Python?

    Метод __del__ вызывается в python, когда он не ожидается

    что означают эти операторы (**, ^,%, //)? – Python?

    icui18n: невозможно открыть файл общих объектов: нет такого файла или каталога

    Совместное использование сценариев, требующих активации virtualenv

    python: изменить рабочий каталог скриптов в собственный каталог скрипта

    Установка протокола не работает на Windows 7 Установка Cygwin

    Как я могу отсортировать список кортежей одним из его значений, а затем другим?

    Печать Объединение строк и чисел

    python regex не соответствует определенному Unicode> 2 шестнадцатеричным значениям

    В python, каковы плюсы и минусы импорта класса и импорта модуля класса?

    Python - лучший язык программирования в мире.