DRF Simple JWT

Posted on 2021-08-30 by GKSRUDTN99
Django Rest Framework 장고 DRF JWT

1. 'djangorestframework-simplejwt'를 pip를 통해 설치한다.

2. INSTALLED_APPSrest_framework_simplejwt를 추가한다.

3. REST_FRAMEWORKDEFAULT_AUTHENTICATION_CLASSES를 정의한다.

# settings.py
REST_FRAMEWORK = {
    # 명시적으로 PermissionClass를 지정하지 않았을 때, 기본으로 사용할 클래스를 지정하는 설정입니다.
    # 인증을 사용하는 경우 Default를 isAuthenticated로 설정하는 것이 더 안전할 것 으로 생각하여 추가로 설정했습니다.
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}

4. token을 얻고, 갱신할 수 있는 url을 설정하고, TokenObtainPairViewTokenRefreshView를 연결한다.

# urls.py
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

urlpatterns += [
    path(r'', TokenObtainPairView),
    path(r'refresh', TokenRefreshView),
]

토큰 사용법

1. id pw를 post로 TokenObtinPairView에 전달하면, access Token을 발급받을 수 있다.

2. access Token을 header에 {'Authorization' : 'JWT {토큰내용}'} 과 같이 작성하여 전달하면 로그인 한 것처럼 사용할 수 있다.

3. Test를 위한 APIClient의 경우, 다음과 같이 token을 header에 붙일 수 있다.

self.client.credentials(HTTP_AUTHORIZATION='JWT ' + self.user_trump_token)

shell을 통해 토큰을 발급받기

1. RefreshToken 모듈 임포트

from rest_framework_simplejwt.tokens import RefreshToken

2. 토큰을 발급받고자 하는 사용자의 레코드를 user라고 할 때, 다음과 같이 발급받는다.

refresh = RefreshToken.for_user(user)

# refresh token
str(refresh)

# access token
str(refresh.access_token)