_won_
wonprogrammer
_won_
전체 방문자
오늘
어제
  • 분류 전체보기
    • woncoding
      • TIL
      • WIL
    • source Code
      • Python
      • Programmers
      • BAEKJOON

블로그 메뉴

  • 방명록

티스토리

Github · Wonprogrammer
hELLO · Designed By 정상우.
_won_

wonprogrammer

TIL | 11.7.월 [Django : DRF]
woncoding/TIL

TIL | 11.7.월 [Django : DRF]

2022. 11. 9. 15:04

- 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
    'woncoding/TIL' 카테고리의 다른 글
    • TIL | 11.9.수 [DRF ↔️ JS CRUD ]
    • TIL | 11.8.화 [Django : DRF]
    • TIL | 11.4.금 [Django : DRF]
    • TIL | 11.3.목 [Django : DRF]
    _won_
    _won_
    Coding Practice blog

    티스토리툴바