장고의 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)
REST_FRAMEWORK 에 있는 DEFAULT_PARSER_CLASSES 와 DEFAULT_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 스터디' 카테고리의 다른 글
DRF 유저 모델(Profile), 아이디 및 이메일 중복확인 (0) | 2021.02.12 |
---|---|
DRF rest-auth, allauth 이메일 인증(email verification) 처리하기! (1) | 2021.02.12 |
Django DRF JWT를 이용한 회원가입/로그인 구현 - (2) (5) | 2021.01.02 |
Django DRF JWT를 이용한 회원가입/로그인 구현 - (1) (0) | 2020.12.30 |
우분투(Ubuntu) 환경, 장고(Django)에서 DB 값 변경하기 (0) | 2020.10.27 |