Django REST Framework Проблемы с доступом к аутентификации

У меня возникли проблемы с аутентификацией. Я опишу свою проблему в шагах, которые я сделал, чтобы помочь вам лучше понять, что за проблема у меня возникла. Я новичок в Django, поэтому мой код может выглядеть как мусор.

Сначала я создаю пользователя, используя свою пользовательскую модель пользователя.

class CustomUserManager(BaseUserManager):
    def create_user(self, email, username, password=None, **extra_fields):
        if not email:
            raise ValueError('The email field must be set')
        email = self.normalize_email(email)
        user = self.model(email=email, username=username, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user


class CustomUser(AbstractUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=128)
    username = models.CharField(max_length=30, unique=True)
    avatar = models.ImageField(upload_to='avatars/', null=True, blank=True)

    # Это поле определяет, активен ли пользователь (False - учетная запись деактивирована)
    is_active = models.BooleanField(default=True)
    # Это поле указывает, является ли пользователь членом персонала (в нашем случае - бустером)
    is_staff = models.BooleanField(default=False)

    objects = CustomUserManager()

    # Это поле определяет, какое поле будет использоваться для входа в систему вместо стандартного username
    USERNAME_FIELD = 'email'
    # Список полей, которые будут требоваться для создания пользователя с помощью команды createsuperuser
    REQUIRED_FIELDS = ['username']

    def __str__(self):
        return self.email

Я использую этот url, view и serializer для создания нового пользователя


path('api/v1/register/', UserRegistrationView.as_view(), name='user-registration'),

class UserRegistrationView(CreateAPIView):
    serializer_class = UserRegistrationSerializer
    permission_classes = [permissions.AllowAny]

    def create(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data)
        serializer.is_valid(raise_exception=True)
        user = serializer.save()

        return Response({
            'user': serializer.data,
        })

class UserRegistrationSerializer(serializers.ModelSerializer):
    password = serializers.CharField(write_only=True)

    class Meta:
        model = CustomUser
        fields = ['username', 'password', 'email']

    def create(self, validated_data):
        user = CustomUser.objects.create(
            username=validated_data['username'],
            email=validated_data['email']
        )
        user.set_password(validated_data['password'])
        user.save()
        return user

После этого я убедился, что таблица в базе данных создана. Таблица называется 'users_customuser'. В таблице есть поле "last_login" со значением NULL для моего нового пользователя. После этого я пытаюсь войти в систему. Я использую djoser, поэтому у меня есть эти url и эти настройки:

path('auth/', include('djoser.urls')),
    re_path(r'^auth/', include('djoser.urls.authtoken')),

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.TokenAuthentication',
    ),
}

INSTALLED_APPS = [
    'django.contrib.auth',
    'django.contrib.admin',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'corsheaders',
    'rest_framework',
    'rest_framework.authtoken',
    'djoser',
    'products',
    'users'
]

У меня также есть таблица "authtoken_token" в базе данных.

Я выполняю вход с помощью url http://localhost:8000/auth/token/login, куда отправляю email пользователя и пароль пользователя. Я делаю это через "Postman" и получаю ответ с моим access_token. Этот токен я могу увидеть в таблице "authtoken_token" с user_id моего пользователя рядом с ним. Также, после успешного входа, я вижу, что значение "last_login" моего пользователя в таблице "users_customuser" изменилось, оно больше не NULL, я вижу там дату и время последнего входа. Это хорошо, но когда я пробую этот url с этим представлением и сериализатором:

path('api/v1/user_view', UserView.as_view(), name='user-view'),

class UserView(CreateAPIView):
    permission_classes = [IsAuthenticated]
    serializer_class = UserSerializer
    def get(self, request, *args, **kwargs):
        return Response('hello!', status=status.HTTP_200_OK)

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = CustomUser
        fields = ['email']

я получаю ошибку 401 с таким кодом:

{
    "detail": "Authentication credentials were not provided."
}

Я получаю этот код при отправке:

{
    "email": "dmitry@yandex.ru",
    "Authorization": "Token 701751147914c580f45640346e5f07a873c16b14"
}

Это на 100% правильный токен и на 100% правильная электронная почта. Я не знаю, что делать и как это исправить.

Я пытался отправить

{
    "email": "dmitry@yandex.ru",
    "Authorization": "Token 701751147914c580f45640346e5f07a873c16b14"
}

И получаем "hello" со статусом 200.

A попытался отправить


{
"email": "dmitry@yandex.ru",
"headers": {
    "Authorization": "Token 701751147914c580f45640346e5f07a873c16b14"
}
}

i also tried to send it with username. Every time i get 401 error.
Вернуться на верх