Как сделать аутентификацию по нескольким моделям пользователей в django с помощью jwt-токенов?

Мне нужен способ аутентификации обеих моделей моей системы с помощью jwt-токенов. Одна из моделей - это модель User, встроенная в django, а другая - модель a Ong, которая имеет отношения один к одному с User.

Мой первый подход - это конечная точка, которая проверяет, есть ли у переданного пользователя ONG, связанный с ним, если да, возвращает True, иначе возвращает False, но я не уверен, что это безопасно или что-то "хорошее", чтобы сделать. Я попробовал этот способ, потому что у меня нет идей, как сделать это, используя JWT-токены для обеих моделей.

Моя модель ong:

class ONG(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    ong_name = models.CharField(max_length=40)
    custom_url = models.CharField(max_length=20, default=str(ong_name).replace(' ', ''), blank=True)
    ong_address = models.CharField(max_length=200, validators=[validate_address])
    ong_cnpj = models.CharField(blank=True, validators=[validate_cnpj])
    ong_phone_number = models.CharField(max_length=12)
    ong_email = models.CharField(validators=[EmailValidator])
    class Meta:
        permissions = [("pet_creation", "can create pets")]
    def __str__(self):
        return f'ONG: {self.ong_name}'

serializers.py

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ["id", "username", "password"]
        extra_kwargs = {"password": {"write_only": True}}

    def create(self, validated_data):
        user = User.objects.create_user(**validated_data)
        return user

class ONGSerializer(serializers.ModelSerializer):
    user = UserSerializer(many=False)
    class Meta:
        model = ONG
        fields = ['user', 'ong_name', 'custom_url', 'ong_address', 'ong_cnpj', 'ong_phone_number', 'ong_email']
    def create(self, validated_data):
        user_data = validated_data.pop('user')
        user = User.objects.create_user(username=user_data['username'], password=user_data['password'])
        ong = ONG.objects.create(user=user, ong_name = validated_data['ong_name'], custom_url = validated_data['custom_url'],
                                 ong_address = validated_data['ong_address'], ong_cnpj = validated_data['ong_cnpj'],
                                 ong_phone_number = validated_data['ong_phone_number'], ong_email=validated_data['ong_email'])
        ong.save()
        return ong

views.py


class CreateUserView(generics.CreateAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer
    permission_classes = [AllowAny]


class ONGRegister(generics.CreateAPIView):
    queryset = ONG.objects.all()
    serializer_class = ONGSerializer
    permission_classes = [AllowAny]

class UserIsOng(APIView):
    def get(self, request):
        username = self.request.data['username']
        user_id = User.objects.filter(username=username)[0].id
        user_exists = ONG.objects.filter(user_id=user_id).exists()
        return Response(
            data={'message': user_exists}
        )

urls.py

from django.contrib import admin
from django.urls import include, path
from ongs.views import *
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView


urlpatterns = [
    path("ongs/", include("ongs.urls")),
    path("admin/", admin.site.urls),
    path("api/user/register/", CreateUserView.as_view(), name="register"),
    path("api/token/", TokenObtainPairView.as_view(), name="get_token"),
    path("api/token/refresh", TokenRefreshView.as_view(), name="refresh"),
    path("api-auth/", include("rest_framework.urls"))]

ongs/urls.py

from django.urls import path, include
from . import views

urlpatterns = [
    path("register/", views.ONGRegister.as_view(), name="ong-create"),
    path("user", views.UserIsOng.as_view(), name="user-verification"),
]
Вернуться на верх