어제는 JWT토큰에 대하여 알아보았다. 오늘은 django의 simplejwt를 이용하여 로그인을 구현해보자
우선 simplejwt 를 사용하기 위해서 pip를 받아야한다.
$ pip install djangorestframework-simplejwt
JWT로 인증할 것 이기 때문에 settings.py
의 REST_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/
으로 username
과 password
를 담아서 확인하기
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