djoser를 사용한 Django REST Framework에서 JWT 인증 기능 구현
djoser란?
djoser은 Django REST Framework에서 기본적인 사용자 인증이나 등록 등의 인증 주위를 지원해주는 라이브러리입니다.
커스텀 모델에 대해서도 사용할 수 있어, Django의 코드를 재이용하는 형태를 취하는 것이 아니라, Single Page Application(이하 SPA)에 의해 피트하는 것 같은 아키텍쳐를 목표로 해 만들어지고 있습니다.
보다 간단한 인증 설정은 여기에서 설명합니다.
이번에는 djoser에서 JWT (JSON Web Token)를 사용한 인증 기능의 구현에 대해 씁니다.
소스 코드는 여기
또, 이하의 모두가 도입 후에 엔드 포인트로서 사용할 수 있습니다.
/users/
/users/me/
/users/confirm/
/users/resend_activation/
/users/set_password/
/users/reset_password/
/users/reset_password_confirm/
/users/set_username/
/users/reset_username/
/users/reset_username_confirm/
/token/login/(Token Based Authentication)
/token/logout/(Token Based Authentication)
/jwt/create/(JSON Web Token Authentication)
/jwt/refresh/(JSON Web Token Authentication)
/jwt/verify/(JSON Web Token Authentication)
Getting started
사용법
우선 설치에서.
$ pip install -U djoser
JWT 인증을 사용하므로 simple_jwt도 함께 사용해야합니다.
$ pip install -U djangorestframework_simplejwt
우선 프로젝트를 만들고
$ django-admin startproject djoser_authentication
프로젝트로 이동합니다.
$ cd djoser_authentication
장고를 설정합니다.
setings.py
from datetime import timedelta # add
.........
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # add
'djoser' # add
]
# add
SIMPLE_JWT = {
#トークンをJWTに設定
'AUTH_HEADER_TYPES':('JWT'),
#トークンの持続時間の設定
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60)
}
# add
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
urls.pyfrom django.contrib import admin
from django.urls import path,include #add
urlpatterns = [
path('admin/', admin.site.urls),
path('api/auth/',include('djoser.urls')), #add
path('api/auth/',include('djoser.urls.jwt')), #add
]
이것뿐입니다.
이 후에 마이그레이션하고 Admin 사용자를 만들어 로컬로 시작합니다.
$ python manage.py migrations
$ python manage.py createsuperuser
Username: Admin
Email address: [email protected]
Password:***********
$ python manage.py runserver
그리고 브라우저에서
http://localhost:8000/api/auth/
방문하면 ...
평소의 Django REST Framework의 화면이군요.
전회라면 이 후 Users에 액세스했을 때에 사용자 정보의 일람이 돌아오고 있었습니다만, 이번은 어떻게 되어 있습니까?
"detail": "Authentication credentials were not provided.
라고 표시되고 있네요. 이것은 인증 자격이 주어지지 않았기 때문에 보이지 않는다! ! 라는 것입니다.
자, 그럼 어떻게하면 사용자 정보를 얻을 수 있습니까?
이를 위해서는 인증을 위한 토큰을 얻어야 합니다.
그래서 토큰을 얻기 위해
http://localhost:8000/api/auth/jwt/create
에 액세스합니다.
그러면 이상과 같은 화면이 나오므로 방금 등록한 Username과 비밀번호를 입력합니다.
그러면
위와 같은 refrash와 access 란에 나누어진 토큰이 표시됩니다.
이것을 사용하여 터미널에서 사용자 정보를 얻으십시오.
터미널에서 다음 명령을 실행합니다.
curl -LX GET http://127.0.0.1:8000/api/auth/users/me/ -H 'Authorization: JWT xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
(xxxx에는 토큰 입력)
그러면
{"email":"[email protected]","id":1,"username":"Admin"}
방금 등록한 사용자 정보가 반환되었습니다!
이 외에도 다양한 기능이 djoser에는 존재하므로 꼭 사용해보세요!
Reference
이 문제에 관하여(djoser를 사용한 Django REST Framework에서 JWT 인증 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/KueharX/items/3568b27213cdbd1cf261
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
우선 설치에서.
$ pip install -U djoser
JWT 인증을 사용하므로 simple_jwt도 함께 사용해야합니다.
$ pip install -U djangorestframework_simplejwt
우선 프로젝트를 만들고
$ django-admin startproject djoser_authentication
프로젝트로 이동합니다.
$ cd djoser_authentication
장고를 설정합니다.
setings.py
from datetime import timedelta # add
.........
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework', # add
'djoser' # add
]
# add
SIMPLE_JWT = {
#トークンをJWTに設定
'AUTH_HEADER_TYPES':('JWT'),
#トークンの持続時間の設定
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60)
}
# add
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
urls.py
from django.contrib import admin
from django.urls import path,include #add
urlpatterns = [
path('admin/', admin.site.urls),
path('api/auth/',include('djoser.urls')), #add
path('api/auth/',include('djoser.urls.jwt')), #add
]
이것뿐입니다.
이 후에 마이그레이션하고 Admin 사용자를 만들어 로컬로 시작합니다.
$ python manage.py migrations
$ python manage.py createsuperuser
Username: Admin
Email address: [email protected]
Password:***********
$ python manage.py runserver
그리고 브라우저에서
http://localhost:8000/api/auth/
방문하면 ...
평소의 Django REST Framework의 화면이군요.
전회라면 이 후 Users에 액세스했을 때에 사용자 정보의 일람이 돌아오고 있었습니다만, 이번은 어떻게 되어 있습니까?
"detail": "Authentication credentials were not provided.
라고 표시되고 있네요. 이것은 인증 자격이 주어지지 않았기 때문에 보이지 않는다! ! 라는 것입니다.
자, 그럼 어떻게하면 사용자 정보를 얻을 수 있습니까?
이를 위해서는 인증을 위한 토큰을 얻어야 합니다.
그래서 토큰을 얻기 위해
http://localhost:8000/api/auth/jwt/create
에 액세스합니다.
그러면 이상과 같은 화면이 나오므로 방금 등록한 Username과 비밀번호를 입력합니다.
그러면
위와 같은 refrash와 access 란에 나누어진 토큰이 표시됩니다.
이것을 사용하여 터미널에서 사용자 정보를 얻으십시오.
터미널에서 다음 명령을 실행합니다.
curl -LX GET http://127.0.0.1:8000/api/auth/users/me/ -H 'Authorization: JWT xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
(xxxx에는 토큰 입력)
그러면
{"email":"[email protected]","id":1,"username":"Admin"}
방금 등록한 사용자 정보가 반환되었습니다!
이 외에도 다양한 기능이 djoser에는 존재하므로 꼭 사용해보세요!
Reference
이 문제에 관하여(djoser를 사용한 Django REST Framework에서 JWT 인증 기능 구현), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KueharX/items/3568b27213cdbd1cf261텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)