[DRF] drf simple jwt 로그인 API

Yungsang Hwang·2022년 7월 12일
0

Django-Rest-Framework

목록 보기
4/15
post-thumbnail

simple jwt

개념정리, 실습

Getting started - Simple JWT 5.2.0.post5+gcd4ea99 documentation

  • 1) 가상환경에 pip install 로 simplejwt를 설치한다
    pip install djangorestframework-simplejwt
  • 2) 프로젝트 setting → REST_FRAMEWORK부분에 simplejwt 코드를 추가해준다
    #settings.py
    REST_FRAMEWORK = {
        'DEFAULT_AUTHENTICATION_CLASSES':
            'rest_framework_simplejwt.authentication.JWTAuthentication' ****
  • 3) SIMPLE_JWT 설정을 위한 기본 세팅을 추가해준다
    #settings.py
    SIMPLE_JWT = {
    		# Access 토큰 유효 시간 설정하기
        'ACCESS_TOKEN_LIFETIME': timedelta(minutes=15),
    		# Refresh 토큰 유효 시간 설정하기
        'REFRESH_TOKEN_LIFETIME': timedelta(days=60),
    
        'ROTATE_REFRESH_TOKENS': False,
        'BLACKLIST_AFTER_ROTATION': False,
        'UPDATE_LAST_LOGIN': False,
    
        'ALGORITHM': 'HS256',
        'SIGNING_KEY': SECRET_KEY,
        'VERIFYING_KEY': None,
        'AUDIENCE': None,
        'ISSUER': None,
        'JWK_URL': None,
        'LEEWAY': 0,
    
        'AUTH_HEADER_TYPES': ('Bearer',),
        'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',
        'USER_ID_FIELD': 'id',
        'USER_ID_CLAIM': 'user_id',
        'USER_AUTHENTICATION_RULE': 'rest_framework_simplejwt.authentication.default_user_authentication_rule',
    
        'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),
        'TOKEN_TYPE_CLAIM': 'token_type',
        'TOKEN_USER_CLASS': 'rest_framework_simplejwt.models.TokenUser',
    
        'JTI_CLAIM': 'jti',
    
        'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',
        'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),
        'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
    }
  • 4) 프로젝트 폴더 url 셋업
    • url을 연결해주기 위한 include 코드 작성

    • 포함할 앱 이름.url 방식으로 작성한다

      # project/urls.py
      
      from django.contrib import admin
      from django.urls import path, include
      
      urlpatterns = [
          path('admin/', admin.site.urls),
          path('user/', include('user.urls')),
      ]
  • 5) user.urls.py
    • access 토큰 발급을 위한 TokenObtainPairView

    • Refresh 토큰 발급을 위한 TokenRefreshView

      # user / urls.py
      from django.urls import path
      from user import views
      
      from rest_framework_simplejwt.views import (
          TokenObtainPairView,
          TokenRefreshView)
      
      urlpatterns =[
          path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
          path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
      ]
  • 6) user.test.py
    • 실제로 로그인 했을 때, 토큰을 받는지 테스트코드 작성

    • reverse 기능을 활용해서 name에 해당하는 url 주소를 가져온다
      - 해당 url의 주소가 바뀌더라도 이름으로 가져오기 때문에 문제 없음!

      # user / tests.py
      
      from django.urls import reverse
      from rest_framework.test import APITestCase
      from rest_framework import status
      from user.models import User as UserModel
      
      # Create your tests here.
      class LoginUserTest(APITestCase):
          def setUp(self):
              
              self.data = {'username':'youngsang', 'password': '1234'}
              self.user = UserModel.objects.create_user('youngsang', '1234')
          
          def test_login(self):
              response = self.client.post(reverse('token_obtain_pair'), self.data)
              self.assertEqual(response.status_code,200)
profile
하루종일 몽상가

0개의 댓글