상세 컨텐츠

본문 제목

221227 최종프로젝트(로그인 validation / custom)

카테고리 없음

by hunss 2022. 12. 27. 23:38

본문

진짜 애먹었는데 다른 validation과 달리 이 serializer는 TokenObatainPairSerializer를 상속받아서 사용하기 때문에 그거까지 고려를 해야했다.

상속받은 serializer를 보면 post방식으로 올 때 저 def validate를 통하기 때문에 저 함수에서 self.get_token(self.user)로 토큰도 생성하고 validation도 하는 것임.

validation은 그동안 했던 것처럼 하는 건데,

새로 안 사실은 password validation에서 check_password 라는 함수이다.

받아오는 password는 해싱되지 않은 생password이고 디비에 저장되어 있는 password는 해싱되어 있어서 비교가 안되지만 check_password를 통해 해싱되지 않은것과 해싱되어 있는 것을 비교할 수 있음.

 

그리고 토큰이 생성될 때 원래 access토큰하고 refresh토큰 두개만 담겨있는데, 프론트에서 다른 값들도 필요로 하고 있어서 추가시켰음.

 

애먹었던 부분은 result = super().validate(data) << 여기 인데

얘가 원래 맨 윗줄에 있었는데, 그렇게 되니까 data가 들어올 때 validate를 통해 먼저 유효성 검사를 해버려서 잘못된 데이터가 들어오면 validation을 하기위한 if문을 통하지 않고 바로 오류를 발생해버렸음.

따라서 validation을 위한 if문을 위에 두고 data의 validate를 밑으로 내렸다.

 

js에서는 순서가 중요한 걸 인지하고 있었는데, python에서 순서로 문제생기니까 생각도 못했었다.