В какой части приложения Django происходит аутентификация пользователя?
Я пытаюсь ограничить несколько входов пользователя с помощью сессий. Ниже приведен мой код
моя модель
class LoggedInUser(models.Model):
user = models.OneToOneField(CustomUser, related_name='logged_in_user', on_delete =models.CASCADE)
session_key = models.CharField(max_length=40, null=True, blank=True)
def __str__(self):
return self.user.username
моя средняя программа
ef MySessionMiddleware(get_response):
def my_function(request):
if request.user.is_authenticated:
try:
user = LoggedInUser.objects.filter(user=request.user).first()
except:
user = LoggedInUser.objects.create(user=request.user)
if user.session_key:
#check whether old key is same as current
print('here inside user.session_key')
if user.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()
response = get_response(request)
return response
return my_function
моя настройка промежуточного ПО
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'pwned_passwords_django.middleware.PwnedPasswordsMiddleware',
'oneFA.middlewares.password_validator_middleware',
'oneFA.middlewares.MySessionMiddleware',
]
моя логика
Я создал модель, которая хранит пользователя с полем OnetoOne с CustomUSer, который является моей аутентифицированной моделью, и ключ сессии, затем каждый раз, когда я делаю вызов, я пытаюсь проверить текущий ключ сессии с предыдущим, и если это не то же самое, то пользователь пытается войти снова, поэтому я возвращаю ошибку
моя ошибка
request.user.is_authenticated всегда приходит false, что означает, что пользователь сейчас не аутентифицирован, я даже пробовал разместить свое промежуточное ПО впереди промежуточного ПО аутентификации и делать свою работу после того, как ответ был сделан, т.е. в цикле возврата, когда каждое промежуточное ПО вызывается снова, но это дает мне то же самое, поэтому мне нужна помощь, когда пользователь аутентифицирован, чтобы я мог проверить ключ сессии или нужно внести изменения в мой подход