djangorestframework_simplejwt customing token claims "Recent changes"
최근 문서가 바뀌어서 그에 맞춰서 바꿔줘야 했었다.
변경 전
공식문서(stable)
https://django-rest-framework-simplejwt.readthedocs.io/en/stable/customizing_token_claims.html
Customizing token claims — Simple JWT 5.2.2 documentation
Customizing token claims If you wish to customize the claims contained in web tokens which are generated by the TokenObtainPairView and TokenObtainSlidingView views, create a subclass for the desired view as well as a subclass for its corresponding seriali
django-rest-framework-simplejwt.readthedocs.io
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
# Add custom claims
token['name'] = user.name
# ...
return token
class MyTokenObtainPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer
나의 문서
# urls.py
from users import views
from django.urls import path
from rest_framework_simplejwt.views import (
TokenRefreshView,
)
urlpatterns = [
path('signup/', views.UserView.as_view(), name='user_view'),
path('api/token/', views.CustomTokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
# veiws.py
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.response import Response
from rest_framework_simplejwt.views import (
TokenObtainPairView
)
from users.serializers import CustomTokenObtainPairSerializer, UserSerializer
class UserView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({"message":"가입완료!"}, status=status.HTTP_201_CREATED)
return Response({"message":f"${serializer.errors}"}, status=status.HTTP_400_BAD_REQUEST)
class CustomTokenObtainPairView(TokenObtainPairView):
serializer_class = CustomTokenObtainPairSerializer
변경 후
공식문서(latest)
https://django-rest-framework-simplejwt.readthedocs.io/en/latest/customizing_token_claims.html
Customizing token claims — Simple JWT 5.2.2.post16+gf298efa documentation
Customizing token claims If you wish to customize the claims contained in web tokens which are generated by the TokenObtainPairView and TokenObtainSlidingView views, create a subclass for the desired view as well as a subclass for its corresponding seriali
django-rest-framework-simplejwt.readthedocs.io
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from rest_framework_simplejwt.views import TokenObtainPairView
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
# Add custom claims
token['name'] = user.name
# ...
return token
# Django project settings.py
...
SIMPLE_JWT = {
# It will work instead of the default serializer(TokenObtainPairSerializer).
"TOKEN_OBTAIN_SERIALIZER": "rest_framework_simplejwt.serializers.MyTokenObtainPairSerializer",
# ...
}
나의 문서
# views.py
from rest_framework.views import APIView
from rest_framework import status
from rest_framework.response import Response
from rest_framework_simplejwt.views import (
TokenObtainPairView
)
from users.serializers import CustomTokenObtainPairSerializer, UserSerializer
class UserView(APIView):
def post(self, request):
serializer = UserSerializer(data=request.data)
if serializer.is_valid():
serializer.save()
return Response({"message":"가입완료!"}, status=status.HTTP_201_CREATED)
return Response({"message":f"${serializer.errors}"}, status=status.HTTP_400_BAD_REQUEST)
# class CustomTokenObtainPairView(TokenObtainPairView):
# serializer_class = CustomTokenObtainPairSerializer
# settings.py에 추가
SIMPLE_JWT = {
"TOKEN_OBTAIN_SERIALIZER": "users.serializers.CustomTokenObtainPairSerializer",
}
이렇게 바꾸면 최근 변경된 것과 같이 적용이 된다.
변경한 근거
설치했던 rest_framework_simplejwt의 views.py에
class TokenObtainPairView(TokenViewBase):
"""
Takes a set of user credentials and returns an access and refresh JSON web
token pair to prove the authentication of those credentials.
"""
_serializer_class = api_settings.TOKEN_OBTAIN_SERIALIZER
token_obtain_pair = TokenObtainPairView.as_view()
이 있는 것을 확인했고 이 것을 토대로 변경하였다.