首页 > 解决方案 > 如何让 self.request.user 返回附加到令牌的用户?

问题描述

我在 Django Rest Framework 中使用令牌身份验证,并将令牌传递到我的请求的标头中。此令牌附加到用户。我将如何做到这一点,以便在调用“self.request.user”时返回请求中附加到令牌的用户?

如果做不到这一点,更具体地说,我需要某种方式来更改我认为的以下“perform_create()”函数,以将“作者”设置为附加到令牌的用户。

perform_create() 函数当前:

def perform_create(self, serializer):
    serializer.save(author = self.request.user)

我需要它,因此将“作者”设置为附加到标头中令牌的用户。

任何帮助将非常感激。

谢谢

编辑:我无法在此实现中使用基于会话的身份验证

标签: djangoapiauthenticationdjango-rest-frameworktoken

解决方案


我使用完全相同的代码(在运行时进行类型检查)在令牌身份验证系统中获取用户模型,并且可以确认它是否有效。

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)
    # ...

编辑:这在文档中得到进一步证实:

如果成功通过身份验证,TokenAuthentication则提供以下凭据。

  • request.user将是一个 Django User 实例。
  • request.auth将是一个rest_framework.authtoken.models.Token实例。

推荐阅读