Как сохранить токен 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
список настроек вашего проекта.