Я хочу ограничить вход нескольких пользователей, но ни один из предыдущих ответов не помогает мне?

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

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

my middleware.py

class MySessionMiddleware:

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

    def __call__(self, request):
  
   
        response = self.get_response(request)
        
        
       
        print(request.user.is_authenticated)
        if request.user.is_authenticated:
            print('here2')
            try:
                user = LoggedInUser.objects.create(user=request.user)
            except: 
                user = LoggedInUser.objects.filter(user=request.user).first()
            print(type(user))
            if not request.session.session_key:
                request.session.save()
            prev_session_key = request.user.logged_in_user.session_key
            print(prev_session_key)
            if prev_session_key:
                print(prev_session_key)
                print(request.session.session_key)
                print('here5')
                #check whether old key is same as current
                print('here inside user.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)

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

Уберите логику из промежуточного ПО сессии, добавьте их в представление входа.

class UserLoginView(generics.RetrieveAPIView):
    """
    View for a user to login through 1FA.
    The view provides a post request that accepts a email and password.
    Returns a jwt token as a response to authenticated user.
    """

    permission_classes = ()
    serializer_class = UserLoginSerializer

    def post(self, request):
        """
        POST request to login a user.
        """

        if (request.user.is_authenticated):
            response = {
                "success": "False",
                "message": "User already logged in!",
            }

            return Response(response, status=400)

        else:
            serializer = self.serializer_class(data=request.data)
            serializer.is_valid(raise_exception=True)
            response = {
                "success": "True",
                "message": "User logged in  successfully",
                "token": serializer.validated_data["tokens"],
                "user_name": serializer.validated_data["user_name"],
            }
            status_code = status.HTTP_200_OK

            return Response(response, status=status_code)
Вернуться на верх