#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