서버시나리오를 생각 했을 때 빠질 수 없는 것이 회원가입, 로그인, 로그아웃 시나리오 이다. 한번만 구현을 해본 경험이 있으면 앞으로 꾸준히 쓸 수 있을 것 같아서 정리를 해두려고 한다.

 

로그인을 관리하기 위해서는 Django 에서 제공하는 Django-rest-auth 라는 패키지를 이용하여 구현을 한다. 클릭 하셔서 Docs 를 보고 직접 구현을 하셔도 되고 내가 실습한 예제를 보셔도 된다.

 

1. Django-rest-auth 설치

아래의 패키지를 나의 가상환경에 설치해준다.

$ pip install django-rest-auth

 

2. Setting.py 에 rest_auth 추가

Setting.py 에 rest_auth 를 추가해준다. rest_framework.authtoken 을 같이 설치해준다. Doc에 보면 rest_auth Project 는 django-rest-framework libary 에 dependency 가 있으므로 rest_framework 을 꼭 설치 하라고 가이드 되어 있다. rest_framework 에 대한 예제는 https://freekim.tistory.com/4 에 나와 있다. 참고 하시길.

 

settings.py

INSTALLED_APPS = [
    ...,
    
    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth',
    ...,
]

 참고) rest_framework 이 설치가 안되어 있는경우

pip install djangorestframework

 

3. rest_auth 의 url 을 추가

urls.py

urlpatterns = [
    ...
    url(r'^rest-auth/', include('rest_auth.urls')),
    ...
]

 

4. Database 에 migration 하기 

url 까지 추가가 끝났으면 database 에 migrate 해준다.

$ python manage.py migrate

명령어를 python 명령어를 실행하면 아래의 화면을 볼 수 있다.

5. Registration

 registration 을 해주기 위해서 setting.py 에 아래의 앱들을 추가해 준다. 이 때 social 의 Authentication 을 추가할 수 있으나 이건 나중에 해보기로 하자. 그리고 SITE_ID = 1 도 추가해준다. allauth app이 설치가 안되어 있다면 설치해주자.

pip install django-allauth

Setting.py

INSTALLED_APPS = [
    ...
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'rest_auth.registration',
]

SITE_ID = 1

 

url 도 추가해주자

urls.py

urlpatterns = [
    ...,
    url(r'^rest-auth/', include('rest_auth.urls')),
    url(r'^rest-auth/registration/', include('rest_auth.registration.urls'))
]

 

Setting 에 아래의 configuration 값을 넣어주면 jwt 를 활성화 해줄 수 있는데, 아직 JWT 를 학습하지 않아 나중에 JWT POST 를 작성하면서 더 자세한 설명을 하도록 하겠다. 

 Docs 를 읽어보면 django-rest-auth 는 Default로 Django’s Token-based authentication이지만 JWT(Json Web Token)로 사용 할 수 있게 해주는 것 같다. 나같은경우는 rest api 로 json 으로 응답을 받으니 JWT 는 다음 포스트에 공부해서 바로 사용 해보아야 겠다.

REST_USE_JWT = True

 

이제 API 의 EndPoint 를 살펴보자

<< Basic >>

  • /rest-auth/login/ (POST)

    • username
    • email
    • password

    Returns Token key

  • /rest-auth/logout/ (POST)

  • /rest-auth/password/reset/ (POST)

    • email
  • /rest-auth/password/reset/confirm/ (POST)

    • uid
    • token
    • new_password1
    • new_password2
  • /rest-auth/password/change/ (POST)

    • new_password1
    • new_password2
    • old_password
  • /rest-auth/user/ (GET, PUT, PATCH)

    • username
    • first_name
    • last_name

    Returns pk, username, email, first_name, last_name

<< Registration >>

  • /rest-auth/registration/ (POST)

    • username
    • password1
    • password2
    • email
  • /rest-auth/registration/verify-email/ (POST)

    • key

 

결과 확인

아래의 명령어를 통해 server를 실행 시킨다.

$ python manage.py runserver

1. end point 의 registration 을 먼저 접근해보자. 아래의 페이지를 볼 수 있다.

간단하게 정보를 입력하고 post 를 해보자. (e-mail 은 default로 활성화 되어 있다. 아래와 같이 설정을 바꾸면 변경 가능하다.

ACCOUNT_EMAIL_REQUIRED = False

ACCOUNT_EMAIL_VERIFICATION = 'none'

)

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

나같은 경우에는 migrate 이 잘못됫는지 email 이 field 가 없다는 오류가 났었다. allauth 에 뭔가 연관이 있는것 같기도 하고 무튼 다시migrate 을 해주고 실행을 하니 정상 동작 했으나 password 를 너무 짧게 썻었는지 아래의 결과를 얻었다. 기본적으로 비밀번호 길이에 대한 예외처리가 들어가 있나보다. 편하다. 그리고 단순한 password 에 대해서도 예외처리가 되어 있나보다.

 

비밀 번호를 변경해 준 후 post 를 눌러보니 잘안되는 것 같았지만 등록이 되었다. 등록이 되었다면 로그인을 해보자.

localhost:8000/rest-auth/login 을 하면 아래의 화면을 볼 수 있다.

방금 전 registration 한 정보를 입력 시켜주고 POST 하게 되면

아래의 그림처럼 token값이 넘어오면서 오른쪽 상단에 볼 수 있듯이 내가 입력한 id 로 로그인이 되게 된다.

이 밖에 다른 endpoint 들도 test해보시길 바란다.

+ Recent posts