- Django Rest Framework
[payload]
https://wonprogrammer.tistory.com/77 참고 :
payload는 실질적으로 인증에 필요한 데이터를 저장한다.
데이터 각각의 필드를 클레임(claim) 이라고 하고, 대부분의 경우 클레임에 username 또는 user_id 를 포함합니다.
인증시에 payload에 있는 username을 가져와서 사용자의 정보를 인증할 때 사용해야 하기 때문니다.
또한 payload에서 중요하게 살펴보아야 할 정보는 **토큰 발행시간(iat)**와 토큰 만료시간(exp) 입니다. 토큰의 만료 시간이 지나면 새로운 토큰을 발급받아야 한다.
# 사용자를 인증하는 정보를 가지고 있어 payload 정보를 기준으로 로그인한다.
PAYLOAD 정보
{
"token_type": "access", # 토큰의 종류. 여기서는 access 토큰입니다.
"exp": 1656293275, # 토큰의 만료시간입니다. (Numeric Date)
"iat": 1656293095, # 토큰의 발행시간입니다. (Numeric Date)
"jti": "2b45ec59cb1e4da591f9f647cbb9f6a3", # json token id 입니다.
"user_id": 1 # 실제 사용자의 id값이 들어있습니다.
}
[payload customizing]
user가 login시 발급되는 token을 가지고 data를 확인 할 수 있는데 data엔 기본적으로 database에 저장된 user_id를 가져오게 된다.
Front에서 user_id가 아닌 user 정보의 다른 object를 가져오고 싶을때 payload customizing을 통해 가져올 수 있다.
- 1) JWT를 settings.py에 맞게 import 해주고, url설정도 해준다.
# settings.py
INSTALLED_APPS = [
'rest_framework_simplejwt', # 얘까지 추가
]
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}
# urls.py
from django.urls import path, include
from rest_framework_simplejwt.views import (
TokenObtainPairView, → 알아서 import 해오는 걸 customizing 해줄거임
TokenRefreshView,
)
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]
- 2) user payload customizing 하기
- 2-1) serializers.py 에서 정의 해주기
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
@classmethod
def get_token(cls, user):
token = super().get_token(user)
# Add custom claims
token['name'] = user.name -> 여기서 내가 custom할 object 넣기
ex)token[‘email’] = user.email
# ...
return token
- 2-2) 정의된 serializers를 이용하기 위해 import를 해준다.
from rest_framework_simplejwt.views import TokenObtainPairView
from rest_framework_simplejwt.views import (
TokenObtainSlidingView, -> 알아서 import 해오는 걸 customizing 해줄거임
TokenRefreshSlidingView,
)
class MyTokenObtainPairView(TokenObtainPairView):
serializer_class = MyTokenObtainPairSerializer
- 2-3) views.py 에서 정의된 함수를 쓰기 위해 url 수정
# 나머진 동일하지만 아래에 들어가는 url 하나만 수정
urlpatterns = [
...
path('api/token/', views.MyTokenObtainPairView.as_view(), name='token_obtain'), : views.py에서 custom된 정의된 함수 불러오기
...
]
[custom된 payload를 이용해 access token으로 data 불러와보기]

👉 payload data에 custom 한 email이 들어와 있는것을 볼 수 있다.
'woncoding > TIL' 카테고리의 다른 글
| TIL | 11.9.수 [DRF ↔️ JS CRUD ] (0) | 2022.11.10 |
|---|---|
| TIL | 11.8.화 [Django : DRF] (0) | 2022.11.09 |
| TIL | 11.4.금 [Django : DRF] (0) | 2022.11.08 |
| TIL | 11.3.목 [Django : DRF] (1) | 2022.11.04 |
| TIL | 11.2.수 [AWS] (0) | 2022.11.04 |