N시간만에 나온 삽질의 결과물이 감격의 순간 먼저보고 가실게요 꺄올
필요한 패키지들 설치하자
pip3 install django-rest-auth
pip3 install django-allauth
pip3 install django-rest-framework
pip3 install django-cors-headers
pip3 install djangorestframework-jwt
** 수정 **
djangorestframework-jwt는 이제 더 이상 업데이트가 되지 않아서(deprecated), 최신 버전의 장고로 작업을 하다보니 에러가 발생.... 후... 이거때문에 삽질을 참 오래했다.
마음편히 장고에서도 권장하는 "djangorestframework-simplejwt"로 설치하자.
pip3 install djangorestframework-simplejwt
앞서 설치한 패키지들을 우리가 사용할 것이라고 장고한테 알려줘야 한다.
'INSTALLED_APPS' 와 'MIDDLEWARE'를 수정해 준다.
#settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django.contrib.sites',
'rest_auth',
'rest_auth.registration',
'allauth',
'rest_framework',
'rest_framework.authtoken',
'corsheaders',
'webtoons',
]
MIDDLEWARE = [
'corsheaders.middleware.CorsMiddleware',
.
.
.
]
settings.py에 cors 관련 설정을 추가해 준다.
#settings.py
#cors관련 셋팅
from corsheaders.defaults import default_methods
CORS_ORIGIN_ALLOW_ALL = False
CORS_ORIGIN_WHITELIST = [
"http://127.0.0.1:8000",
"http://localhost:8000",
]
CORS_ALLOW_METHODS = list(default_methods) + [
"",
]
CORS_ALLOW_HEADERS = (
'accept',
'accept-encoding',
'authorization',
'access-control-request-method',
'access-control-request-headers',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
)
settings.py에 추가
REST_FRAMEWORK = {
# 'DEFAULT_PERMISSION_CLASSES': ( #로그인여부확인, 유효한 유저만 접근가능하도록 설정
# 'rest_framework.permissions.IsAuthenticated',
# ),
'DEFAULT_AUTHENTICATION_CLASSES': ( #인증방식클래스설정
'rest_framework_simplejwt.authentication.JWTAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
SITE_ID = 1 #Admin 페이지 관리번호 로 단일한 서버는 1번
REST_USE_JWT = True
AUTH_USER_MODEL = 'users.User'
JWT_AUTH = {
'JWT_SECRET_KEY': os.environ.get('SECRET_KEY2'),
'JWT_ALGORITHM': 'HS256',
'JWT_ALLOW_REFRESH': True,
'JWT_EXPIRATION_DELTA': datetime.timedelta(hours=6),
'JWT_REFRESH_EXPIRATION_DELTA': datetime.timedelta(days=7),
}