用户密码未使用Rest Framework加密Django

问题描述

创建用户密码时,密码保持纯文本格式。我还使用信号来创建与用户相关的用户个人资料。尽管我使用set_password方法,但密码未加密。

Serializer.py


class UserSerializerAPI(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ['username','email','password','is_teacher']
        extra_kwargs = {"password":{"write_only":True}}

        def create(self,validated_data):
            username = validated_data['username']
            email = validated_data['email']
            password = validated_data['password']
            user_obj = User(
                username = username,email = email
            )
            user_obj.set_password(password)
            user_obj.save()
            return user_obj

views.py

class createuser(CreateAPIView):
    serializer_class = UserSerializerAPI
    queryset = MyUser.objects.all()

解决方法

您可以像这样编码`

class RegisterSerializer(serializers.ModelSerializer):
      password1 = serializers.CharField(write_only=True)

      class Meta:
          model = User
          fields = ('username','email','password','password1','is_teacher',)

      def validate(self,attr):
        validate_password(attr['password'])
        return attr

      def create(self,validated_data):
          user = User.objects.create( # this line  will solve your problem
              username=validated_data['username'],is_teacher=validated_data['user_type'],email=validated_data['email'],)
          user.set_password(validated_data['password']) 
          user.save()



          return user

最好的问候

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...