본문 바로가기
source-code/Django

Django REST Framework _ 회원가입 구현하기

by mattew4483 2021. 2. 15.
728x90
반응형

현재 우리는 api-auth란 URL요청을 통해 rest_framework.urls로 로그인과 로그아웃을 진행한다!

 

urls.py

바로 요 녀석!

그런데 얘만으로는 createsuperuser로 생성한 User밖에 로그인/로그아웃이 되지 않는다!

따라서 일반 사용자들도 회원가입과 로그인/로그아웃을 이용할 수 있도록 만들 예정!

 

www.django-rest-framework.org/api-guide/authentication/#custom-authentication

 

Authentication - Django REST framework

 

www.django-rest-framework.org

오늘도 오늘도 공식문서의 도움을 받는다.


우선 회원가입을 진행할 텐데...

지금까지는 그저 username과 password를 통해 User를 구분했다.

하지만 이 경우 username과 password을 DB안에 보관하기 때문에 보안에 취약해질 수밖에 없다!

 

친절한 DRF는 이를 막기 위해, 각 User마다 token을 발급해 이들을 식별하는 방법을 제공하고 있다.

DRF에서 제공하는 네 가지의 Authentication!

 

BasicAuthentication은 username과 password로 식별하는 가장 기본적인 방식!

testing이나 개발 환경에서 적절하다고 한다.

 

TokenAuthentication은 simple token을 통해 식별하는 방식!

client-server setups에 적절하다고 한다.

 

SessionAuthentication은 Django의 default session backend를 이용하는 방식.

AJAX clients에게 적절하다고 하는데... 무슨 소린지

 

RemoteUserAuthentication은 따로 설정한 REMOTE_USER가 대신 승인을 하는 방식.

역시나 무슨 소리인지...

 

개발 환경에 적합한 녀석과 잘 모르겠는 두 녀석을 빼고 나니...

TokenAuthentication만 남았다! 따란.

 

따라서 여기서는 TokenAuthentication 방식을 이용해 볼 예정.

 

1. 필요 모듈 설치

TokenAuthentication 방식에서는 django-rest-auth를 이용해야 하는데... 설치해야 하는 게 워낙 많다!

django-rest-auth.readthedocs.io/en/latest/installation.html

 

Installation — django-rest-auth 0.9.5 documentation

Using django-allauth, django-rest-auth provides helpful class for creating social media authentication view. Note Points 1 and 2 are related to django-allauth configuration, so if you have already configured social authentication, then please go to step 3.

django-rest-auth.readthedocs.io

따라서 공식문서를 (또) 참고.

 

시키는 대로 필요한 녀석들을 설치해주자!

제일 먼저 django-rest-auth. 

요 녀석을 통해 로그인/로그아웃이 가능해진다.

 

그런데 얘를 깔면...

이런 에러가 뜬다!

당황하지 않고 잘 읽어보면, 그냥 wheel을 깔라는 뜻.

고분고분 깔아주면 된다.

다음은 djagno-allauth.

요 녀석으로 회원가입이 이뤄진다.

 

2. settings 수정

이렇게 열심히 깔았으니, settings에서 이를 알려줘야 한다!

settings.py

따란!

이 중 rest_framework.authtoken는 설치한 적이 없는데?

→ rest_framework 패키지 안에 있으므로 settings에서 앱만 추가하면 된다.

 

또한 여기서 django.contrib.sites나 SITE_ID를 빼먹으면?

곧바로 RuntimeError!

공식 문서가 시키는 대로 차근차근 빼먹지 말도록 하자.

 

이까지 완료했다면...

migrate!

allauth의 account, authtoken, sites 등이 적용되는 걸 볼 수 있다.

 

3. urls 수정

urls.py

기존의 rest_framework.urls 대신... rest_auth.urls를 이용한다!

 

이 녀석의 정체는 또 무엇인고?

아항! rest_framework.urls와 마찬가지로 URL을 통해 로그인/로그아웃, 그리고 회원가입까지 구현된 녀석이다!

 

적혀있는 대로 URL 요청을 보내보면...

http://127.0.0.1:8000/rest-auth/login/

와우!

createsuperuser로 만들었던 Username과 Password로 POST 요청을 보내보면...

 

http://127.0.0.1:8000/rest-auth/login/

우와우!

POST 요청 속 Username과 Password 대신, key(token)를 발급해 User를 구분하고 있다!

 

http://127.0.0.1:8000/rest-auth/registration/

registration을 통해 회원가입도 가능해졌다!

정보를 입력하고 POST 요청을 보내면...

 

DRF 기본 Authentication원칙이 적용되는 모습!

이를 지켜서 다시 POST 요청을 보내면...

 

성공적으로 key가 발급되면서 login이 이뤄진다!

 

이를 Admin 페이지를 통해 확인해보면...

KNOX는 무시해도 된다.

각 녀석들이 잘 적용되어 있으며,

 

회원가입과 token 발급 역시 완료된 걸 확인할 수 있다! 얏호!

728x90
반응형