Не существует запроса на сопоставление токенов в / api / users, не существует в Django rest api

#django #authentication #django-rest-framework #token #http-token-authentication

#django #аутентификация #django-rest-framework #токен #http-token-аутентификация

Вопрос:

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

Мое мнение:

 class UsersListView(ListAPIView):
    serializer_class = UserListSerializer

     def get(self, request, *args, **kwargs):
         user = Token.objects.get(key="token").user
         return self.list(request, user)
  

и я также попробовал это, которое возвращает запрос на сопоставление токенов, не существует.

 class UsersListView(ListAPIView):
        serializer_class = UserListSerializer

    def get_queryset(self):
        return User.objects.filter(user =Token.objects.get(key="token").user)
  

Мой сериализатор:

 class UserListSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = '__all__'
  

Моя пользовательская модель:

 class UserManager(BaseUserManager):

    def create_user(self, email, password=None, **kwargs):
        """Creating new user and saving the user."""
        if not email:
            raise ValueError('Admin must have a valid email')
        user = self.model(email=self.normalize_email(email), **kwargs)
        user.set_password(password)
        user.save(using=self._db)

        return user

    def create_superuser(self, email, password):
        """Creates and saves a new super user"""
        user = self.create_user(email, password)
        user.is_staff = True
        user.is_superuser = True
        user.save(using=self._db)

        return user
#
#
class User(AbstractBaseUser, PermissionsMixin):
    """ Custom user model that supports using email instead of username """

    email = models.EmailField(max_length=255, unique=True)
    first_name = models.CharField(max_length=255)
    last_name = models.CharField(max_length=255)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=True)

    objects = UserManager()
    USERNAME_FIELD = 'email'
  

Ответ №1:

Вы должны передать значение токена, переданное в заголовке, в качестве значения токена, а не строки «токен».

 user = Token.objects.get(key=request.META.get('HTTP_AUTHORIZATION') ).user