[django] Django 프레임워크 JWT 예제

최승언·2023년 9월 18일
0

django

목록 보기
14/15
post-thumbnail

다음은 Django 프레임워크에서 JWT(JSON Web Token)를 사용하는 예제 코드입니다. 이 코드는 Django REST 프레임워크와 함께 작동합니다.

먼저, djangorestframework 및 djangorestframework-simplejwt 패키지를 설치해야 합니다. 다음 명령어를 사용하여 설치할 수 있습니다:

pip install djangorestframework djangorestframework-simplejwt

설치가 완료되면, 다음과 같이 설정 파일(settings.py)을 수정해야 합니다:

# settings.py

INSTALLED_APPS = [
    # ...
    'rest_framework',
    'rest_framework_simplejwt',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

SIMPLE_JWT = {
    'AUTH_HEADER_TYPES': ('Bearer',),
}

이제 JWT 인증을 사용할 준비가 되었습니다. 아래는 JWT 토큰 생성 및 검증에 대한 예제입니다.

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.tokens import RefreshToken
from django.contrib.auth import authenticate

class TokenObtainView(APIView):
    def post(self, request):
        username = request.data.get('username')
        password = request.data.get('password')

        # Authenticate the user using Django's built-in authenticate() function
        user = authenticate(username=username, password=password)

        if user is not None:
            refresh = RefreshToken.for_user(user)
            return Response({
                'refresh': str(refresh),
                'access': str(refresh.access_token),
            })
        else:
            return Response({'error': 'Invalid credentials'}, status=400)

class ProtectedView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        content = {'message': 'This is a protected view'}
        return Response(content)

위의 코드에서 TokenObtainView는 사용자의 로그인 정보(username 및 password)를 받아 유효성을 검사하고, 유효한 경우 JWT 토큰을 발급합니다.

ProtectedView는 IsAuthenticated 권한 클래스를 가지며, 해당 뷰에 접근하려면 유효한 JWT 토큰이 필요합니다.

JWT 토큰은 클라이언트에게 응답으로 반환되며, 클라이언트는 이 토큰을 인증된 요청에 포함시켜 보호된 뷰에 액세스할 수 있습니다.

참고: 이 예제에서는 간단한 JWT 구현 방법을 보여주기 위해 username과 password를 요청 데이터로 직접 받아들였습니다. 실제로는 Django의 인증 시스템 또는 다른 방법으로 인증 로직을 구현하는 것이 안전합니다.

urls.py 파일은 Django 애플리케이션의 URL 매핑을 정의하는 파일입니다. JWT 인증을 구현한 예시 코드에서 app 폴더안 urls.py 파일은 다음과 같이 작성할 수 있습니다:

from django.urls import path
from .views import TokenObtainView, ProtectedView

urlpatterns = [
    path('token/', TokenObtainView.as_view(), name='token_obtain'),
    path('protected/', ProtectedView.as_view(), name='protected'),
]

프로젝트 안의 urls.py는 다음과 같습니다.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    # 다른 URL 패턴들을 여기에 추가할 수 있습니다.

    # api 앱의 URL 매핑 추가하기
    path('api/', include('api.urls')),
]

위 코드에서는 /token/ 경로에 대한 요청을 TokenObtainView 클래스 기반 뷰로 연결하고, /protected/ 경로에 대한 요청을 ProtectedView 클래스 기반 뷰로 연결합니다.

따라서 클라이언트가 /token/ 경로에 POST 요청을 보내면 TokenObtainView.post() 메서드가 실행되고, /protected/ 경로에 GET 요청을 보내면 ProtectedView.get() 메서드가 실행됩니다.

위의 예시 코드를 사용하여 JWT 인증 관련 엔드포인트를 설정하고, 해당 엔드포인트와 맞는 HTTP 요청을 보내어 테스트할 수 있습니다. 이때 실제 사용자 인증 로직 및 데이터베이스 연동 부분은 개발자가 직접 구현해야 합니다. 위 예시 코드에서는 "username과 password로 사용자 인증 로직 수행" 부분이 아직 구현되지 않았으므로 해당 부분은 프로젝트에 맞게 적절히 수정되어야 합니다.

따라서 위의 예시 코드를 참고하여 프로젝트의 URL 매핑(urls.py) 파일에 JWT 인증 관련 엔드포인트를 추가하고, 필요한 로직 및 데이터베이스 연동 부분을 구현하십시오.

profile
작업하다가 막힌부분을 기록하는 곳.

0개의 댓글