TIL django westargram -로그인 기능 구현

0

TIL

목록 보기
17/29
post-thumbnail

이메일 & 비밀번호 validation

회원가입 기능을 구현하면서 입력되는 이메일과 비밀번호에 대해서 적절히 입력되었는지 확인하는 과정을 구현하기로 했다.

validation 조건

이메일 --- @ ~--.~~~ 형태
비밀번호 **** **** 8글자 이상

꼭 필요한 조건은 이메일의 경우 아이디가 나오고 중간에 @가 들어가야 되고 .이 들어가서 이메일의 형태를 나타내야 한다.

비밀번호는 입력되는 문자가 8글자 이상인 경우에만 유효하다고 간주된다.

처음 이를 보고 구현한 방식은 이메일의 경우는

if "@", "." in data["email] :

이런식으로 논리식을 구성했다. 그런데 이 방식은 문제가 있다. 그 이유는 물론 일반적인 이메일이 위 논리식을 만족하는 것이 맞지만 다른 이메일도 위 양식을 만족할 수 있다.
예) 123@@!2.123
이런 경우를 방지하기 위해 정규 표현식을 써서 표현을 해주는 것이 좋다.

regEXP_email = re.compile('^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')

raise vs try except

다음으로 조건은 완성은 되었으나 예외처리를 해주는 방식의 차이가 있다.

처음 시도했던 방식은 조건을 만족할 때 Exception 예외를 일으켜서 except에서 예외를 처리하는 식으로 진행을 했다.

하지만 여기서 '오류''예외'에 대해서 짚고 넘어갈 필요가 있었다. 오류컴퓨터에서 이것을 처리하지 못하니 다시 한번 봐봐! 라고 하는 일종의 경고다. 반면에 예외는 일반적으로 원하는 경우와 다른 결과를 말한다.

이메일이 일반적인 ~@~.com으로 표현되지 않는 것과 비밀번호가 8자보다 작은 것은 컴퓨터에서 처리하지 못하는 양식이 아니라 운영을 위해 필요한 제약이다. 그렇기 때문에 raise 로 에러를 일으킬 필요없이 이런 경우가 발생하면 더이상의 진행을 멈추고 메시지를 보내주면 된다.

return Jsonresponse ({message:"improper input},status =400)

으로 return을 사용해서 프로세스의 진행을 멈추고 이 때의 상태코드를 메시지로 전달해주면 된다.

이런식으로 진행하는 것이 컴퓨터 입장에서 부담이 적다. raise로 에러를 일으키는 행동이 하나 추가되고 그 에러가 어떤 에러에 해당하는지 일일이 찾아야 할 필요가 없어지기 때문이다.

중복되는 값 입력 방지

회원가입시 요청으로 날아온 정보가 이미 DB에 등록이 되어 있다면 그에 맞는 반응을 보이는 조건이다.

if 이용한 논리식

처음 조건을 확인했을 때 User의 있는 객체들과 일일이 요구하는 조건의 값을 비교하는 방식으로 접근해보기로 했다.

이 방식은 여러가지 문제가 있는데 이를 정리하면 다음과 같다.

  • for 문을 돌면서 일일이 확인을 해야한다 --> 데이터 수가 많아질수록 급격하게 비효율적이다.
  • 확인을 해야하는 것이 email, name,phone_number을 다 확인을 해야 한다.
  • DB의 데이터가 담길 때 이 조건이 정확히 적용되는 지 확인이 안된다.
  • 예외가 발생할 때 예외가 발생한 원인 파악 가능

다만 이 방식을 이용하면 해당 예외가 발생할 때 어떤 이유로 에러가 발생했는지 알 수 있다. (직접 accout_info already exists"로 지정해주기 때문에 )
이게 양날의 칼인데 해당 메시지를 명시해서 예외를 다루기에는 편해질 수 있다. 하지만 보안에 취약할 수 있다. 해커들이 해당 메시지를 바탕으로 좀 더 세분화된 해킹 시도를 할 수 있기 때문이다.

위와 같은 단점 등이 있어서 이를 보완하는 것이 좋은데 해결할 수 있는 엄청나게 심플한 방법이 있다.

models 에 unique 적용

models에서 클래스로 테이블을 정의할 때 unique=True 조건을 넣어주면 끝이다! (so simple!! )

이 방식으로는 고유값만 DB에 담겨서 일일이 비교할 필요도 없고 DB 자체적으로 데이터가 거절되는 것이기 때문에 내가 원하는 데이터만 안전하게 담긴다.


회원가입 기능 구현 완료~~~

profile
기록을 통해 한 걸음씩 성장ing!

0개의 댓글