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

Вот как я делаю сейчас

my middleware.py

class MySessionMiddleware:

    def __init__(self, get_response):
        self.get_response = get_response

    def __call__(self, request):
       
        response = self.get_response(request)
       
        if request.user.is_authenticated:
            user, _ = LoggedInUser.objects.get_or_create(user=request.user)   
            print(user)
            if not request.session.session_key:
                request.session.save()
            prev_session_key = user.session_key
            if prev_session_key:
                if prev_session_key != request.session.session_key:
                    return JsonResponse("you already have a active session kindly logout from that", 
                            status=400, safe=False)
            user.session_key = request.session.session_key
            user.save()
       
        return response
   

my models.py

class LoggedInUser(models.Model):
    user = models.OneToOneField(User, related_name='logged_in_user', on_delete =models.CASCADE, null=True, blank=True)
    session_key = models.CharField(max_length=32, null=True, blank=True)

my signals.py

@receiver(user_logged_in)
def when_user_logs_in(sender,  user, request, **kwargs):
    print('user_logs_signal is called')
    LoggedInUser.objects.get_or_create(user=kwargs.get('user'))

@receiver(user_logged_out)
def when_user_logs_out(sender, user, request, **kwargs):
    print('user logs out signal iscalled')
    LoggedInUser.objects.get_or_create(user=kwargs.get('user')).delete()

мои ошибки

  • мои сигналы не срабатывают, в настоящее время я тестирую приложение через postman и используя аутентификацию на основе токенов, они не срабатывают. Поэтому я создаю объект внутри middlware
  • .
  • При использовании postman LoggedInUser ключ сессии объекта LoggedInUser и ключ сессии request.session всегда получаются одинаковыми

мои сомнения

  • Я знаю, что когда пользователь регистрируется с другой вкладки, окна, генерируется новый ключ сессии, но каковы другие сценарии, когда генерируется новый ключ сессии .
  • Если проблемы, с которыми я сталкиваюсь, связаны с использованием postman, то как я могу протестировать приложение в браузере, так как мне нужно отправить заголовок авторизации в нем
  • .
  • Почему мои сигналы не срабатывают, несмотря на то, что я импортировал их в apps.py, является ли это также причиной использования postman
  • .

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

Вернуться на верх