это мои модели. Я должен использовать сеанс, чтобы я мог получить идентификатор сеанса пользователя
from django.conf import settings
from django.db import models
from django.contrib.sessions.models import Session
# Create your models here.
class UserSession(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
session = models.OneToOneField(Session,on_delete=models.CASCADE)
def __str__(self):
return self.user.username
моего файла authentication.py, чтобы я мог позволить только одному пользователю одновременно войти в систему. Я получил ошибку в строке сессия = Session.objects.get (рк = request.session.session_key).
from django.contrib.auth.backends import ModelBackend
from .models import UserSession
from django.contrib.sessions.models import Session
from django.contrib.auth.backends import ModelBackend
class MyBackend(ModelBackend):
def authenticate(self, request, username=None, password=None, **kwargs):
if Session.objects.filter(usersession__user__username=username).exists():
return None
else:
user = super().authenticate(request,username=username,password=password,**kwargs)
if user:
UserSession.objects.get_or_create(
user=user,
session=Session.objects.get(pk=request.session.session_key)
)
return user
Это мои настройки. Lab - это имя приложения, а authentication.py - это файл, в который я включил код фильтра.
AUTHENTICATION_BACKENDS = ['lab.authentication.MyBackend']