如何使 self.request.user return 用户附加到令牌?
How to make self.request.user return the user attached to token?
我在 Django Rest Framework 中使用令牌身份验证,并将令牌传递到我请求的 header 中。此令牌附加到用户。我将如何做到这一点,以便在调用 'self.request.user' 时,返回请求中附加到令牌的用户?
做不到这一点,更具体地说,我需要某种方法来更改我认为的以下 'perform_create()' 函数,而不是将 'author' 设置为附加到令牌的用户。
perform_create() 当前函数:
def perform_create(self, serializer):
serializer.save(author = self.request.user)
我需要它,所以 'author' 设置为附加到 header 中令牌的用户。
如有任何帮助,我们将不胜感激。
谢谢
编辑:我无法在此实现中使用基于 session 的身份验证
我使用完全相同的代码(在运行时进行类型检查)在令牌身份验证系统中获取用户模型并可以确认它是否有效。
def perform_create(self, serializer: ModelSerializer) -> None:
serializer.save(registrant=self.request.user)
registrant
是用户模型的外键:
# models.py
from django.conf import settings
from django.db import models
class Model(models.Model):
# ...
registrant = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, blank=True, null=True)
# ...
编辑: 这在 documentation:
中得到进一步证实
If successfully authenticated, TokenAuthentication
provides the following credentials.
request.user
will be a Django User instance.
request.auth
will be a rest_framework.authtoken.models.Token
instance.
我在 Django Rest Framework 中使用令牌身份验证,并将令牌传递到我请求的 header 中。此令牌附加到用户。我将如何做到这一点,以便在调用 'self.request.user' 时,返回请求中附加到令牌的用户?
做不到这一点,更具体地说,我需要某种方法来更改我认为的以下 'perform_create()' 函数,而不是将 'author' 设置为附加到令牌的用户。
perform_create() 当前函数:
def perform_create(self, serializer):
serializer.save(author = self.request.user)
我需要它,所以 'author' 设置为附加到 header 中令牌的用户。
如有任何帮助,我们将不胜感激。
谢谢
编辑:我无法在此实现中使用基于 session 的身份验证
我使用完全相同的代码(在运行时进行类型检查)在令牌身份验证系统中获取用户模型并可以确认它是否有效。
def perform_create(self, serializer: ModelSerializer) -> None:
serializer.save(registrant=self.request.user)
registrant
是用户模型的外键:
# models.py
from django.conf import settings
from django.db import models
class Model(models.Model):
# ...
registrant = models.ForeignKey(to=settings.AUTH_USER_MODEL, on_delete=models.SET_NULL, blank=True, null=True)
# ...
编辑: 这在 documentation:
中得到进一步证实If successfully authenticated,
TokenAuthentication
provides the following credentials.
request.user
will be a Django User instance.request.auth
will be arest_framework.authtoken.models.Token
instance.