Как использовать пользовательскую модель в django-rest-framework-simple-jwt

Simple -jwt в настоящее время выдает токен с помощью superuser, но я хочу использовать свою пользовательскую модель. (Я определил пользовательскую модель пользователя, как показано ниже.)

class User(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=10, unique=True, blank=False)
    password = models.CharField(max_length=128)

    def __repr__(self):
        return self.__class__


class UsersSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ("name", "password")

Мой вопрос заключается в том, что я могу получить токен с использованием пользовательской модели на Simple-JWT?

если simple-jwt использует пользовательскую модель пользователя, скажите, пожалуйста, как использовать пользовательскую модель пользователя.

2 ответа

SimpleJWT использует AUTH_USER_MODEL для генерации JWT. Если вы планируете иметь более одного пользователя аутентификации, вам следует настроить логику для этого конкретного случая. Я надеюсь, что эти ответы помогут.

Это работает для меня, попробуйте, если вы правильно установили djangorestframework_simplejwt

Просто вставьте это в конец вашегоsettings.py

REST_AUTH_SERIALIZERS = {
    'USER_DETAILS_SERIALIZER': 'users.serializers.UserSerializer',
}

здесь UserSerializer использует CustomUserModel, т.е.serializers.py

class UserSerializer(serializer.ModelSerializer):
    class Meta:
        model = get_user_model()
        fields = []
        read_only_fields = ( ,)

И добавьте сериализатор, который переопределяет метод проверки сериализатора по умолчанию для TokenObtainPairView

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer


class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
    def validate(self, attrs):
       # The default result (access/refresh tokens)
       data = super().validate(attrs)
       refresh = self.get_token(self.user)

       # assign token 
       data['refresh'] = str(refresh)
       data['access'] = str(refresh.access_token)

       # extra fields
       data['age'] = self.user.age
       return data

С помощью этого я получаю поле модели "age" созданного мной CustomUserпри вызове конечных точек входа в систему.

Используйте этот сериализатор в своем классе представлений, а затем вызовите URL-адрес этого представления. После вызова этого URL-адреса

Возвращенные данные следующие:

{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9..............",
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9...............",
"username": "Shubham",
"id": 4,
"age": 100,
"description": "Slow shubham gadwal mehra try to understand."

}