Django JWT用户认证报错:TypeError: User()收到意外参数'password2'
解决Django JWT用户认证中
password2参数错误问题 问题根源
- 序列化器中的
validate和自定义创建方法未正确缩进,不属于UserRegistrationSerializers类,导致DRF使用默认的create逻辑,将password2传递给User模型(模型不支持该参数)。 - 自定义创建方法名错误:DRF的ModelSerializer创建实例时需要重写
create方法,而非validate_data。 - 验证方法中异常类拼写错误:应为
serializers.ValidationError而非serializer.ValidationError。
修正后的serializers.py代码
from rest_framework import serializers from account.models import User class UserRegistrationSerializers(serializers.ModelSerializer): password2 = serializers.CharField(style={'input_type':'password'}, write_only=True) class Meta: model = User fields=['email','name','tc','password','password2'] extra_kwargs={ 'password':{'write_only':True} } def validate(self, attrs): password = attrs.get('password') password2 = attrs.get('password2') if password != password2: raise serializers.ValidationError("Password and Confirm Password Does not match") return attrs def create(self, validated_data): # 移除password2参数,User模型不接受该字段 validated_data.pop('password2') # 调用自定义的create_user方法创建用户 return User.objects.create_user(**validated_data)
其他说明
- 你的
models.py中UserManager的create_user方法已经正确处理了密码逻辑,无需修改。 views.py代码保持原样即可,修正序列化器后就能正常执行用户创建逻辑。
内容的提问来源于stack exchange,提问作者Filbadeha
相关产品推荐
相关产品推荐

