카테고리 없음

6월 29일 Django_simple_jwt 사용하기

khw7876 2022. 6. 29. 23:59

어제는 JWT토큰에 대하여 알아보았다. 오늘은 django의 simplejwt를 이용하여 로그인을 구현해보자

우선 simplejwt 를 사용하기 위해서 pip를 받아야한다.

$ pip install djangorestframework-simplejwt

JWT로 인증할 것 이기 때문에 settings.pyREST_FRAMEWORK의 인증 방식을 변경(추가)해 줍니다.

REST_FRAMEWORK = {

    'DEFAULT_AUTHENTICATION_CLASSES': [
    # JWT 인증 방식 추가하기
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}
from datetime import timedelta

REST_USE_JWT = True
SIMPLE_JWT = {
    "ACCESS_TOKEN_LIFETIME": timedelta(days=1),
    "REFRESH_TOKEN_LIFETIME": timedelta(days=7),
    "ROTATE_REFRESH_TOKENS": True,
    "BLACKLIST_AFTER_ROTATION": True,
    "SIGNING_KEY": os.environ.get('JWT_SECRET_KEY', "SIMPLE")
}

simplejwt 에서 제공하는 기본 JWT 인증을 사용할 것입니다. 따라서 인증 토큰 발급 urlpatterns 에 토큰 발급 view 를 추가해 줍니다.

from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
)

urlpatterns = [
    ...
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    ...
]

postman을 통하여 user/api/token/ 으로 usernamepassword 를 담아서 확인하기

JWT 토큰을 DECODE 하기 위해서는 jwt.io에 접속하여 simplejwt 를 통해 발급받은 토큰을 확인한다.

※ 수정사항!!

UserSerializer의 일부분이다.

회원가입을 진행할 때 비밀번호를 Hash와 하지 않는다면 SimpleJWT로 로그인이 불가!!

꼭 회원가입의 Veiws.py에서 유저데이터의 Save()가 일어날 때 serializer의 create()함수를 거쳐 set_password가 일어나도록 하자!

def create(self, *args, **kwargs):
    user = super().create(*args, **kwargs)
    p = user.password
    user.set_password(p)
    user.save()
    return user