使用 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)
上下文:
我的项目正在使用 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)