Django rest session authentification postman

Я настроил метод django auth:

class MyBackend(ModelBackend):

    def authenticate(self, request, phone=None, otp=None, **kwargs):
        UserModel = get_user_model()
        try:
            user = UserModel.objects.get(phone=phone)
        except UserModel.DoesNotExist:
            return None
        else:
            if user.otp == otp:
                # user.otp = None
                # user.save()
                return user

    def get_user(self, phone):
        UserModel = get_user_model()
        try:
            return UserModel.objects.get(phone=phone)
        except UserModel.DoesNotExist:
            return None

Мой класс аутентификации:

class ValidateOTP(APIView):
    def post(self, request):
        phone = request.data.get('phone', None)
        otp = request.data.get('otp', None)

        if not phone or not otp:
            return Response({'error': 'Wrong data.'}, status=status.HTTP_400_BAD_REQUEST)

        user = authenticate(request, phone=phone, otp=otp)
        login(request, user)
        return Response({'Ok': 'ok'}, status=status.HTTP_200_OK)

С помощью postman я создаю пользователя по конечной точке http://127.0.0.1:8000/api/validate-otp/. Все нормально. Но когда я пытаюсь выполнить GET-запрос к другой конечной точке, мой request.user - Anonymous.

class UserInfo(APIView):
    permission_classes = ([IsAuthenticated])
    def get(self, request):
        print(request.user)
        return Response({'ok': 'ok'}, status=status.HTTP_200_OK)

Что может быть проблемой?

UPD (1):

class ValidateOTP(APIView):
    authentication_classes = [SessionAuthentication, ]
    
    def post(self, request):
        phone = request.data.get('phone', None)
        otp = request.data.get('otp', None)

        if not phone or not otp:
            return Response({'error': 'Wrong data.'}, status=status.HTTP_400_BAD_REQUEST)

        user = authenticate(request, phone=phone, otp=otp)
        login(request, user)
        return Response({'Token': 'token.key'}, status=status.HTTP_200_OK)

class UserInfo(APIView):
    permission_classes = ([IsAuthenticated])
    authentication_classes = [SessionAuthentication,]

    def get(self, request):
        queryset = CustomUser.objects.select_related('referral_code').get(pk=request.user.id)
        serialized = UserSerializer(queryset)
        return Response({'ok': serialized.data}, status=status.HTTP_200_OK)

A login(…) [Django-doc] in an API (often) does not make much sense. Unless you use the SessionAuthentication [drf-doc] or implement some session-like authentication yourself. The login is attached to that session, but the next HTTP request, does not use that session: if you would work with session-based authentication, you each time need to send the session id with the request.

Таким образом, аутентификация типа OTP должна возвращать, например, токен, который клиент может использовать для (каждого) запроса, или, возможно, менять токен, или работать с идентификатором сессии, но вход пользователя, таким образом, регистрирует пользователя для этой сессии, поэтому, если вы используете это, вам нужно, чтобы API и клиент знали о сессии.

Вернуться на верх