Как использовать пользовательскую модель в 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."
}