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로 입력받는 값 이외의 결과가 함께 들어갈 수 있음을 주의해야한다.
'프로젝트 > 미술관 뒤 백엔드 지금은 전시상황' 카테고리의 다른 글
최종 팀 프로젝트[back] openAPI image 이슈 (0) | 2023.06.30 |
---|---|
최종 팀 프로젝트[front] netlify 배포 후 image 이슈 (0) | 2023.06.27 |
최종 팀 프로젝트[notion] 노션으로 발표 자료 만들기 (0) | 2023.06.23 |
최종 팀 프로젝트[front] addEventListener 활용하기 (0) | 2023.06.22 |
최종 팀 프로젝트[front] content-type 정하기 (0) | 2023.06.20 |