Django - 로그인view: 기본적인 app (4)

solee·2022년 2월 22일
0

Django

목록 보기
7/12
post-thumbnail

🚩목표

  • httpie로 데이터를 전송해 로그인을 진행할 수 있다.

    (여기부터는 다음 글에서!)

  • 회원가입 시 bcrypt를 사용해 암호화를 진행한다.

  • 로그인 시 JWT를 사용해 인가받는다.




이번에는 gs25 프로젝트에 가입한 점장님들이 로그인하려고 한다. 빠르게 진행하자!

로그인한다는 것은 아이디(이메일)와 비밀번호를 서버에 전송해 일치 여부를 검증하는 것이므로 post 메서드가 필요하다. 로그인을 위한 뷰를 작성한다.

뷰 이름이 나오자마자 members앱의 urls.py에 urlpattern을 추가하자.

다음으론 views.py다.
회원가입과 겹치는 부분들이 많으니 일단 똑같이 작성하면 이런 형태를 가진다.

  • 데이터에서 이메일과 패스워드를 가지고 email이나 password라는 데이터가 없을 때의 KeyError를 error handling한다. email = data["email"] 에서 에러가 발생할 것이다.

  • 아래의 ObjectDoesNotExistdjango.core.exception에서 import한 것으로 get() 메서드에 일치하는 레코드가 존재하지 않을 경우 생기는 에러를 핸들링한다. 이 경우 입력한 email이 데이터베이스에 존재하지 않을 때 get()에서 에러가 발생할 것이다.

  • email(컬럼명)이 email(입력받은 데이터)인 객체의 password값이 입력받은 password와 일치하는지 확인한 후 일치하지 않을 경우 INVALID_USER를 리턴한다. if문에서 password가 일치하지 않을 경우, 즉 틀린 비밀번호를 입력했을 경우 에러가 발생할 것이다.



결과 및 에러 확인

DB를 확인해 보자.
1234라는 이메일과 1234라는 비밀번호로 로그인을 하면 이런 결과가 나온다.



12222라는 존재하지 않는 이메일로 로그인을 하면 이런 결과가 나온다.



1234라는 이메일과 일치하지 않는 비밀번호인 1222로 로그인하면 이런 결과가 나온다.



이메일 혹은 비밀번호 중 하나를 보내지 않으면 이런 결과가 나온다.





마치며

여러 에러 메시지와 성공했을 때의 결과를 확인해 보았다. 무사히 데이터를 받거나 에러 핸들링을 잘 해두면 적절한 에러가 반환되지만, 만일 500에러가 발생해 서버가 종료된다면 문제가 있는 것이다.
그런 일이 일어나지 않도록 에러 핸들링에 신경을 많이 써야 할 것이다.

아이디(이메일)가 틀렸는지 비밀번호가 틀렸는지 말해주면 안돼??

그렇다. 왜 무조건 INVALID_USER가 리턴되는 것일까? 이메일 에러나 패스워드 에러라고 반환해주면 안 될까? 갑갑하지만 안 된다. 보안을 위해 아이디나 비밀번호 중 어떤 것이 틀렸는지 알 수 없도록 리턴되어야 한다.

실제 서비스를 이용할 때에도 "아이디 혹은 비밀번호가 틀렸습니다"라고 해서 갑갑했을 것이다.
우리도... 그래야 한다(으앙!)

profile
DA DA DA

0개의 댓글