使用 JSON Web 令牌在 React 中获取自定义 Django REST 用户 class

Getting custom Django REST user class in React using JSON Web Token

上下文:

我的项目正在使用 Django REST 和 React。
我创建了一个用户 class,它基于 this tutorial 扩展了 AbstractBaseUser,以获取几个额外的字段,并使用电子邮件而不是用户名来进行身份验证。
为了登录,我使用 djangorestframework-jwt 在 React 中获取访问令牌。

问题:

我还没有找到基于 JSON Web 令牌从 Django REST 获取用户实例的方法。

我尝试过的:

尝试在这个视图中使用 JWTAuthentication:

@api_view(['POST'])
@authentication_classes([JWTAuthentication])
def getUser(request, format=None):
    content = {
        'user': str(request.user),
        'auth': str(request.auth)
    }
    return Response(content)

它确实有点用,因为它 returns 用户的电子邮件地址和令牌,但我想获取所有用户字段。

我也尝试从 this SO answer 复制,但在 setting.py 中我不知道如何指定 JWTAuthentication class.

的路径

我的用户class:

from django.contrib.auth.models import PermissionsMixin
from django.contrib.auth.base_user import AbstractBaseUser, BaseUserManager

class UserManager(BaseUserManager):
    use_in_migrations = True

    def _create_user(self, email, password, **extra_fields):
        if not email:
            raise ValueError('The given email must be set')

        email = self.normalize_email(email)
        user = self.model(email=email, **extra_fields)
        user.set_password(password)
        user.save(using=self._db)
        return user

    def create_user(self, email, password, **extra_fields):
        extra_fields.setdefault('is_superuser', False)
        return self._create_user(email, password, **extra_fields)

    def create_superuser(self, email, password, **extra_fields):
        extra_fields.setdefault('is_superuser', True)

        if extra_fields.get('is_superuser') is not True:
            raise ValueError('Superuser must have is_superuser=True.')

        return self._create_user(email, password, **extra_fields)

class User(AbstractBaseUser, PermissionsMixin):
    email = models.EmailField(unique=True)
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)
    date_joined = models.DateTimeField(auto_now_add=True)
    is_active = models.BooleanField(default=True)
    about = models.CharField(max_length=250)

    objects = UserManager()

    USERNAME_FIELD = 'email'

    REQUIRED_FIELDS = [ 'first_name', 'last_name', 'password' ]

希望有人能指点一下。谢谢!

'user': str(request.user) 这将获取用户对象并调用 __str__ 方法

@api_view(['GET'])
@authentication_classes([JWTAuthentication])
def GetUser(request, format=None):
    user = request.user
    content = {
        'id': user.id,
        'email': user.email,
        'first_name': user.first_name,
        # other_fields
        'auth': str(request.auth)
    }
    return Response(content)