본문 바로가기

프로젝트/미술관 뒤 백엔드 지금은 전시상황

최종 팀 프로젝트[back] serializer update이슈 해결

1.serializer update 이슈 해결 

 문제점

patch를 사용했을 때 비밀번호의 값이 들어가지 않게 된다면 patch를 사용한 뒤 재 로그인이 불가능한 이슈 발생 

 시도해 본 것들

문제가 발생하는 코드 확인하기 

    def update(self, instance, validated_data):
        # patch를 사용 하기 위에 값이 들어 오지 않으면 원래 상태, 아니면 수정된 데이터 저장
        user = super().update(instance, validated_data)
        password = user.password
        user.set_password(password)  # 비밀번호 암호화
        user.save()
        return user

기존의 코드를 봤을 때 user.password로 불러오기 때문에 patch를 사용하여 입력하는 부분만 수정한다고 하더라도 password가 자동적으로 수정되고 있는 것으로 추정 

 

print()를 통해서 password값 확인하기 

user = super().update(instance, validated_data)
        print(user.password)
        password = user.password
        user.set_password(password)  # 비밀번호 암호화
        print(user.password)

 

pbkdf2_sha256$600000$yKjV577J2MPAAA2wU8PTUS$PWLnUjO17xuDksd7pYNe8o8J2TKW/VRYKpeliGiAdPU=

pbkdf2_sha256$600000$cxZNpYdtiQj1PCYQnJ7C6x$iuGLSW5t6O4O7L6ShkHx5hlvUMir2eAWTcnDuDWrpE0=

hash로 암호화된 비밀번호가 다시한번 해시처리되며 바뀌는 것을 확인 

 해결 방법

def update(self, instance, validated_data):
        # patch를 사용 하기 위에 값이 들어 오지 않으면 원래 상태, 아니면 수정된 데이터 저장
        user = super().update(instance, validated_data)
        if "password" in validated_data.keys():
            password = validated_data.pop("password")
            user.set_password(password)  # 비밀번호 암호화
        user.save()
        return user

validated_data를 통해서 password라는 key가 존재하는지 확인하고 존재할 경우 password에 해시를 통한 비밀번호 암호화 과정을 진행한다. 

 알게 된 점

patch를 사용한다고 하더라도 serializer에서 오버라이딩하여 update method를 변경한다면 validated_data로 입력받는 값 이외의 결과가 함께 들어갈 수 있음을 주의해야한다.