Я хочу ограничить вход нескольких пользователей, но ни один из предыдущих ответов не помогает мне?
Я хочу ограничить вход нескольких пользователей, например, когда пользователь пытается войти снова, я хочу выдать ему ошибку, говорящую, что у вас уже есть активная сессия
Вот как я делаю это сейчас
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)