웹 개발

[장고] JWT 사용하기 #4

성밍쟁 2024. 2. 10. 21:02
728x90
반응형

프롤로그

JWT 코드 관련해서 뭔가 이상함을 느끼고 계속해서 코드를 수정하고 있다. 

2024.01.31 - [웹 개발] - [장고] 장고로 JWT 사용하기 #3

처음 공부하는 부분이고 이것저것 잘못된 정보를 배워와서 그런 가 잘못된 정보를 많이 넣어놨기에..

.코드만 수정하겠다.

userid, 이름, 이메일, 닉네임, 유저타입, 그 유저타입에 따른 정보들이 토큰에 추가가 될 것이다.

 

 

 

serializers.py

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
from django.contrib.auth import get_user_model

User = get_user_model()



class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
    @classmethod
    def get_token(cls, user):
        token = super().get_token(user)

        # 사용자의 기본 정보 추가
        token['id'] = user.id
        token['name'] = user.name
        token['email'] = user.email
        token['nickname'] = user.nickname
        token['user_type'] = user.user_type

        # 사용자 유형에 따른 추가 정보 포함
        if user.user_type == 'e':
            try:
                enterprise = user.enterprise  
                token['enterprise'] = {
                    'company_name': enterprise.company_name,
                    'company_code': enterprise.company_code,
                    'department': enterprise.department,
                    'position': enterprise.position
                }
            except User.enterprise.RelatedObjectDoesNotExist:
                token['enterprise'] = None

        elif user.user_type == 'i':
            try:
                individual = user.individual 
                token['individual'] = {
                    'school': individual.school,
                    'department': individual.department
                }
            except User.individual.RelatedObjectDoesNotExist:
                token['individual'] = None

        return token

토큰 값을 설정해주는 것이다.

 

이후

 

 

views.py

class CustomTokenObtainPairView(TokenObtainPairView):
    serializer_class = CustomTokenObtainPairSerializer

views.py 에서 함수화 시켜주고

 

urls.py

urlpatterns = [
    path("admin/", admin.site.urls),
    path("signup/", include('signup.urls')),
    path('login/', include('login.urls')),
    path('api/token/', CustomTokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]

여기서, api/token/ 을 아까 설정한 토큰값 이름으로 설정해주면 끝

 

 

 

테스트

http://127.0.0.1:8000/api/token/

위 주소로 들어가  이메일와 비밀번호를 입력하면 리프레시 토큰과 액세스 토큰이 잘 넘겨준 것을 알 수 있다.

 

저 액세스 토큰을 프론트엔드 쪽에서 받아서 해석하면 되는데, 저 액세스토큰안에 내가 아까 설정해놓은 여러가지 정보들 값이 들어가있다.

 

 

에필로그

빠르게빠르게 합시다.

 

 

 

728x90
반응형