Как сохранить токен simplejwt в базе данных

Я использую django-rest-framework-simplejwt для регистрации пользователей.

Следуя этому руководству, введите описание ссылки здесь

Мне нравится следующий код:

class RegistrationSerializer(serializers.ModelSerializer):
    password = serializers.CharField(
        style={'input_type': 'password'}, write_only=True,
    )
    password2 = serializers.CharField(
        style={'input_type': 'password'},max_length=20
    )
    tokens = serializers.SerializerMethodField()

    class Meta:
        model = UserProfile
        fields = ['username', 'email', 'password', 'password2', 'tokens']

    def get_tokens(self, user):
        user = UserProfile(
            email=self.validated_data['email'],
            username=self.validated_data['username']
        )
        password = self.validated_data['password']
        password2 = self.validated_data['password2']
        if password != password2:
            raise serializers.ValidationError({'password': 'Passwords must match.'})
        user.set_password(password)
        tokens = RefreshToken.for_user(user)
        refresh = text_type(tokens)
        access = text_type(tokens.access_token)
        data = {
            "refresh": refresh,
            "access": access
        }
        return data

    def save(self):
        user = UserProfile(
            email=self.validated_data['email'],
            username=self.validated_data['username']
        )
        password = self.validated_data['password']
        password2 = self.validated_data['password2']
        if password != password2:
            raise serializers.ValidationError({'password': 'Passwords must match.'})
        user.set_password(password)
        user.save()
        return user

ввиду:

class UserCreateView(generics.CreateAPIView):
    '''create user'''
    serializer_class = RegistrationSerializer

Проблема в том, что каждый раз, когда я создаю пользователя, я могу получить возврат двух двух токенов, однако в базе данных я не могу найти токен.

Полагаю, я их не хранил, так должен ли я хранить токен?

1 ответ

JWT можно использовать для аутентификации без базы данных. потому что он кодирует данные, необходимые для аутентификации, в токенах. Ваше приложение сможет аутентифицировать пользователей после декодирования токенов со встроенными в него данными.

Но если вы хотите хранить токены в simplejwt вы можете использовать OutstandingingToken модель, которая реализована в simplejwt для хранения токенов в базе данных.

Перед использованием OutstandingToken, убедитесь, что вы положили rest_framework_simplejwt.token_blacklist в вашем INSTALLED_APPS список настроек вашего проекта.