如何解决如何以django将用户密码存储为pbkdf2_sha256格式?
我正在实现自定义寄存器序列化器。顺便说一句,密码是在管理页面上加密的,因此它与pbkdf2_sha256不同。像这样
!eWf3UsvTHU4dJ4F.....
我想使用pbkdf2_sha256算法代替此方法来获取用户密码。我该怎么办?这是我的代码。
class customRegisterSerializer (serializers.Serializer) :
email = serializers.EmailField(required=allauth_settings.EMAIL_REQUIRED)
password = serializers.CharField(required=True,write_only=True)
user_Name = serializers.CharField(required=True)
profile = serializers.ImageField(use_url=True)
def validate_email(self,email):
email = get_adapter().clean_email(email)
if allauth_settings.UNIQUE_EMAIL:
if email and email_address_exists(email):
raise serializers.ValidationError(
_("A user is already registered with this e-mail address."))
return email
def validate_password (self,password: str) -> str:
return get_adapter().clean_password(password)
def get_cleaned_data(self):
return {
'email': self.validated_data.get('email',''),'password': self.validated_data.get('password','userName': self.validated_data.get('userName','profile' : self.validated_data.get('profile',}
def save(self,request):
adapter = get_adapter()
user = adapter.new_user(request)
self.cleaned_data = self.get_cleaned_data()
adapter.save_user(request,user,self)
setup_user_email(request,[])
return user
解决方法
我尝试您的方式来存储密码,但是密码没有以正确的形式存储。因此,您不能仅通过使用用户模型来存储密码。您需要其他模型。创建配置文件模型并为其创建序列化器,然后尝试以下操作:-
serializers.py
class UserRegistrationSerializer(serializers.ModelSerializer):
profile = ProfileSerializer(required=False)
class Meta:
model = User
fields = ('phone','username','password','profile')
extra_kwargs = {'password': {'write_only': True}}
def create(self,validated_data):
profile_data = validated_data.pop('profile')
user = User.objects.create_user(**validated_data)
users = Profile.objects.create(
user=user,state=profile_data['state'],city=profile_data['city'],date_Of_Birth=profile_data['date_Of_Birth'],address=profile_data['address']
)
users.save()
return users
views.py
class UserRegistrationView(CreateAPIView):
serializer_class = UserRegistrationSerializer
permission_classes = (IsAuthenticated,)
def post(self,request):
serializer = self.serializer_class(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
response = {
'success' : 'True','status code' : status.HTTP_200_OK,'message': 'User registered successfully',}
status_code = status.HTTP_200_OK
return Response(response,status=status_code)
希望答案是有用的。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。