我知道如何使用simplejwt
. 现在我想在用户注册后在包含电子邮件的令牌中返回自定义声明。我该怎么做呢?
我的序列化器:
class CreateUserSerializer(serializers.ModelSerializer):
password = serializers.CharField(min_length=8, required=True, write_only=True)
password2 = serializers.CharField(min_length=8, write_only=True, required=True)
tokens = serializers.SerializerMethodField()
def get_tokens(self, user):
refresh = RefreshToken.for_user(user)
return {
'refresh': str(refresh),
'access': str(refresh.access_token),
}
def validate(self, data):
if data['password'] != data['password2']:
raise serializers.ValidationError({"password": "Password fields didn't match."})
return data
def create(self, validated_data):
password = validated_data.pop('password', None)
password2 = validated_data.pop('password2', None)
instance = self.Meta.model(**validated_data)
if password is not None:
instance.set_password(password)
instance.save()
return instance
class Meta:
model = CustomUser
fields = ('id', 'email', 'password', 'password2', 'tokens')
extra_kwargs = {'password': {'write_only': True}}
它返回默认的 JWT 访问和刷新令牌。我想在此处的令牌中返回自定义声明。
风景:
class CreateUserView(generics.CreateAPIView):
permission_classes = [permissions.AllowAny]
def create(self, request, *args, **kwargs):
serializer = CreateUserSerializer(data = request.data)
if serializer.is_valid(raise_exception=True):
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)