본문 바로가기

문돌이 존버/Django 스터디

DRF allauth, rest-auth, JWT를 활용한 회원가입 및 로그인

반응형

장고의 allauth는 보통 소셜 로그인(페이스북, 구글, 네이버, 카카오톡 등)을 사용하기 위해 많이 쓰는 라이브러리입니다. 하지만 전 기본적인 회원가입 작동 및 유저 모델 커스터마이징을 위해 사용했습니다.

pip install django-allauth

먼저 allauth를 사용하기 위해선 settings.py 에서 INSTALLED_APPS를 아래처럼 작성해줍니다.

# settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # user authentication basic module
    'django.contrib.sites',
    'allauth',
    'allauth.socialaccount',
    'allauth.account',
	
    # 회원 관리용 app
    'accounts'
]

이후 urls.py 를 아래처럼 입력해줍니다. 

# urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),

    path('accounts/', include('allauth.urls')),
]
python manage.py migrate

가장 기본적인 aullauth를 구축했습니다. 본격적으로 회원가입 및 로그인을 위해 장고의 rest-auth 라이브러리를 사용해보겠습니다. 

pip install django-rest-auth
pip install djangorestframework

rest-auth를 사용하려면 장고의 restframework가 필요합니다. 위에서 작성한 settings.py 에 아래 내용을 추가로 입력해줍니다. 

# settings.py
INSTALLED_APPS = [

    'rest_framework',
    'rest_framework.authtoken',
    'rest_auth.registration',

]

SITE_ID = 1

# ACCOUNT_EMAIL_VERIFICATION = "mandatory" <- 이메일 인증 번호 필요
ACCOUNT_EMAIL_VERIFICATION = "none"
ACCOUNT_EMAIL_REQUIRED = True

아래는 urls.py 에 추가적으로 작성할 내용입니다. 

# urls.py
from rest_auth.views import (
    LoginView, LogoutView, PasswordChangeView,
    PasswordResetView, PasswordResetConfirmView
)

urlpatterns = [
    # 로그인
    path('rest-auth/login', LoginView.as_view(), name='rest_login'),
    path('rest-auth/logout', LogoutView.as_view(), name='rest_logout'),
    path('rest-auth/password/change', PasswordChangeView.as_view(), name='rest_password_change'),

    # 회원가입
    path('rest-auth/registration', RegisterView.as_view(), name='rest_register'),
]

http:127.0.0.1:8000/rest-auth/registration 을 들어가면 아래 회원가입 화면이 뜹니다. 

또한, http:127.0.0.1:8000/rest-auth/login 을 들어가면 로그인 화면이 뜹니다. 

마지막으로 django-rest-auth는 JWT 토큰 인증을 지원하기 때문에 이 또한 사용해보록 하죠. 이전에 JWT를 통한 회원가입 및 로그인에 대한 글을 썼었는데, 그것보다 훨씬 간단합니다. JWT 개념은 제 다른 글을 참고해주세요. Django DRF JWT를 이용한 회원가입/로그인 구현 - (1)

 

Django DRF JWT를 이용한 회원가입/로그인 구현 - (1)

최근에 장고 대신 DRF(Django Rest Framework)를 사용해서 백엔드 구축 과제를 진행하고 있는데요. 이전에 데이터 처리 및 DB용으로 장고를 사용하긴 했어도, DRF는 처음이다보니 익숙치 않네요 ㅎㅎ 그

moondol-ai.tistory.com

REST_FRAMEWORK 에 있는 DEFAULT_PARSER_CLASSESDEFAULT_FILTER_BACKENDS 는 회원가입과 로그인과 직접적으로 관련이 없으나 이후에 필요한 작업이라 미리 추가했습니다. DEFAULT_PARSER_CLASSES 관련 내용은 여기를,  DEFAULT_FILTER_BACKENDS 관련 내용은 여기참고해주세요. 

간단히 말해, DEFAULT_PARSER_CLASSES 는 이후에 클라이언트가 보내는 데이터 request.data를 읽을 때 기본으로 사용하는 파서(parser)를 정하는 것입니다. DEFAULT_FILTER_BACKENDS 는 이후에 DB 데이터를 어떤 조건에 따라 필터링(filtering)할 수 있는 기능입니다. 모두 DRF에서 기본으로 제공하는 것을 사용했습니다.

# settings.py
import datetime

REST_FRAMEWORK = {
    'DEFAULT_PARSER_CLASSES': [
        'rest_framework.parsers.MultiPartParser',
        'rest_framework.parsers.JSONParser',
    ],
    'DEFAULT_AUTHENTICATION_CLASSES':[
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',

    ],
    'DEFAULT_FILTER_BACKENDS': ['django_filters.rest_framework.DjangoFilterBackend'],
}

REST_USE_JWT = True

JWT_AUTH = {
    'JWT_SECRET_KEY': SECRET_KEY,
    'JWT_ALGORITHM': 'HS256',
    'JWT_ALLOW_REFRESH': True,
    'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
    'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=28),
}

 

위와 같이 설정하면 회원가입을 할 때 아래 토큰을 볼 수 있을 것입니다. JWT 토큰은 로그인할 때도 뜨며 이것이 서버에서 확인되어야 클라이언트는 게시글을 작성하든, 댓글을 작성하든 뭔가 활동을 할 수 있을 것입니다. 

지금까지 회원가입 및 로그인 하는 방법을 살펴봤습니다. 다음에는 이메일 인증 보내는 방법을 살펴보겠습니다. 

참고: django-allauth 홈페이지  /  django-rest-auth 홈페이지

728x90
반응형