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.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에는 존재하므로 꼭 사용해보세요!

좋은 웹페이지 즐겨찾기