Пользователь не имеет сеанса атрибутов
После поиска в Интернете я не могу найти решение. Я создаю свое собственное приложение для аутентификации: Я могу зарегистрировать пользователя, отправить письмо с активацией учетной записи, активировать учетную запись, войти в систему и правильно изменить пароль. Однако, когда дело доходит до выхода из системы, я получаю ошибку 'User' object has no attribute 'session'
. Я пытаюсь распечатать пользователя, и он правильно показывает электронную почту и имя пользователя, связанные с ним. Проверяю куки, там вроде бы есть действительный токен csrf и действительный идентификатор сессии. Я буду рад, если вы сможете дважды проверить мой логин, выход из системы и настройки, чтобы понять, не напутал ли я чего-нибудь.
settings.py
REST_FRAMEWORK = {
78 'DEFAULT_AUTHENTICATION_CLASSES': (
79 'rest_framework.authentication.SessionAuthentication',
80 'rest_framework.authentication.BasicAuthentication',
81 ),
82 'DEFAULT_PERMISSION_CLASSES': (
83 'rest_framework.permissions.IsAuthenticated',
84 'rest_framework.permissions.IsAdminUser',
85 ),
86 }
loginView
class LoginView(APIView):
23 authentication_classes = [SessionAuthentication, BasicAuthentication] : list[Unknown]
24 permission_classes = [AllowAny] : list[Type[AllowAny]]
25
26 def post(self, request): -> Response
27 serializer = LoginSerializer(data=request.data) : LoginSerializer
28 if serializer.is_valid():
29 try:
30 user = authenticate(request, : Unknown | None
31 email_or_username=request.data["email_or_username"],
32 password=request.data["password"])
33
34 except ValueError as e:
35 return Response({"errors": f"{e}"}, status=status.HTTP_400_BAD_REQUEST)
36
37 login(request, user)
38 return Response({"success":"user successfully logged in"},
39 status=status.HTTP_200_OK)
40
41 return Response({"errors" : serializer.errors}, status=status.HTTP_400_BAD_REQUEST)
42
logoutView
class LogoutView(APIView):
44 authentication_classes = [SessionAuthentication, BasicAuthentication] : list[Unknown]
45 permission_classes = [IsAuthenticatedOrReadOnly] : list[Type[IsAuthenticatedOrReadOnly]]
46
47 def post(self, request): -> Response
48
49 if request.user and request.user.is_active:
50 logout(request.user)
51 return Response({"success" : "user successfully logout"},
52 status=status.HTTP_200_OK)
53 return Response({"errors" : "user not logged in"},
54 status=status.HTTP_401_UNAUTHORIZED)
55
P.S. Я также создал свой собственный бэкэнд аутентификации
backends.py
6 class UserBackend(BaseBackend):
>> 7 def authenticate(self, request, email_or_username, password=None): -> Unknown
8 try:
9 user = User.objects.get(Q(username=email_or_username) | : Unknown
10 Q(email=email_or_username))
>> 11 except User.DoesNotExist:
12 raise ValueError("The credentials entered are invalid")
13
14 if not user.is_active:
15 raise ValueError("Account is not activated, check the email received upon "
16 "registration")
17
18 if not user.check_password(password):
19 raise ValueError("Invalid Password")
20
21 return user
22
23 def get_user(self, user_id): -> (Unknown | None)
24 try:
25 return User.objects.get(pk=user_id)
26
>> 27 except User.DoesNotExist:
28 return None
Спасибо за помощь