【问题标题】:how to use custom model user in django-rest-framework-simple-jwt如何在 django-rest-framework-simple-jwt 中使用自定义模型用户
【发布时间】:2019-11-29 07:05:44
【问题描述】:

simple-jwt 当前使用超级用户发布令牌,但我想使用我的自定义用户模型。 (我定义了自定义用户模型如下。)

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 使用自定义 User 模型,请告诉我如何使用自定义 User 模型。

【问题讨论】:

    标签: python django django-rest-framework django-rest-framework-jwt django-rest-framework-simplejwt


    【解决方案1】:

    这对我有用,试试 假设您正确安装了 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
    

    在此帮助下,我获得了我创建的 CustomUser 的“年龄”模型字段,在调用登录端点时。

    在您的视图类中使用此序列化程序,然后调用此视图的 url 调用此网址后

    返回数据如下:

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

    }

    【讨论】:

      猜你喜欢
      • 2020-12-18
      • 2020-07-28
      • 2021-04-28
      • 1970-01-01
      • 2020-07-23
      • 1970-01-01
      • 2020-04-03
      • 1970-01-01
      • 2013-11-15
      相关资源
      最近更新 更多