问题描述
创建用户密码时,密码保持纯文本格式。我还使用信号来创建与用户相关的用户个人资料。尽管我使用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
最好的问候