Получение пользовательского класса Django REST в React с помощью JSON Web Token
Контекст:
Мой проект использует Django REST вместе с React.
Я создал класс User, который расширяет AbstractBaseUser, основываясь на этом руководстве, чтобы получить пару дополнительных полей и использовать email, вместо имени пользователя, для аутентификации
.
Для входа в систему я использую djangorestframework-jwt для получения токена доступа в React.
Проблема:
Я не нашел способа получить экземпляр пользователя из Django REST на основе JSON Web Token.
Что я пробовал:
Попробовал использовать JWTAuthentication с этим представлением:
@api_view(['POST'])
@authentication_classes([JWTAuthentication])
def getUser(request, format=None):
content = {
'user': str(request.user),
'auth': str(request.auth)
}
return Response(content)
Это вроде как работает, поскольку возвращает адрес электронной почты пользователя и токен, но я хочу получить все поля пользователя.
Я также пробовал копировать из этого ответа SO, но в setting.py я не знаю, как указать путь к классу JWTAuthentication.
Мой класс пользователя:
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)