DjangoRestFramework 는 simpleJWT 로그 인 인증 전체 기록 을 사용 합 니 다.

본 고 는 djangorestframework-simplejwt 사용 기록 입 니 다.(공식 문서 )
 1.설치 

pip install djangorestframework-simplejwt
 2.사용
 Django 프로젝트 및 app 만 들 기:

#      simple    
django-admin startproject simple
 
#      users    
cd simple
python manage.py startapp users
 디 렉 터 리 구 조 는 다음 과 같 습 니 다.

 'simple/settings.py'에서 설정:

# simple/settings.py
 
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'users',                        # add
    'rest_framework',               # add
    'rest_framework_simplejwt',     # add
]
 
REST_FRAMEWORK = {                  # add
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
}
 데이터 베 이 스 를 동기 화하 고 슈퍼 사용 자 를 만 듭 니 다:

#      
python manage.py makemigrations
python manage.py migrate
 
#       
python manage.py createsuperuser
'simple/urls.py'에서 경로 작성: 

# simple/urls.py
from django.contrib import admin
from django.urls import path
from rest_framework_simplejwt.views import TokenRefreshView, TokenVerifyView, TokenObtainPairView
 
urlpatterns = [
    path('admin/', admin.site.urls),
    path('login/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('verify/', TokenVerifyView.as_view(), name='token_verify'),
]
 python http 도 구 를 사용 하여 인터페이스 테스트 를 진행 합 니 다:
http -f POST http://127.0.0.1:8000/login/ username=admin password=123456

 3.API 인터페이스 테스트
 'users/views.py'에서 다음 코드 를 작성 합 니 다:

# users/views.py
from rest_framework import permissions
from rest_framework.response import Response
from rest_framework.views import APIView
 
 
class MyView(APIView):
    permission_classes = [permissions.IsAuthenticated]
 
    def get(self, request, *args, **kwargs):
        return Response("Get information successfully!")
 그리고'simple/urls.py'에 경로 추가:

# simple/urls.py
from users import views    # add
 
urlpatterns = [
    ...
    path('info/', views.MyView.as_view()),    # add
]
 python http 도 구 를 사용 하여 테스트:

4.설정 관련  

# settings.py
 
from datetime import timedelta
 
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),  #          
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),    #          
 
    'ROTATE_REFRESH_TOKENS': False,     #   True,      refresh_token        
    'BLACKLIST_AFTER_ROTATION': True,   #   True,    token        , 
                                        # When True,'rest_framework_simplejwt.token_blacklist',should add to INSTALLED_APPS
 
    'ALGORITHM': 'HS256',       #     :HS256 HS384 HS512       :RSA
    'SIGNING_KEY': SECRET_KEY,
    'VERIFYING_KEY': None,      # if signing_key, verifying_key will be ignore.
    'AUDIENCE': None,
    'ISSUER': None,
 
    'AUTH_HEADER_TYPES': ('Bearer',),           # Authorization: Bearer <token>
    'AUTH_HEADER_NAME': 'HTTP_AUTHORIZATION',   # if HTTP_X_ACCESS_TOKEN, X_ACCESS_TOKEN: Bearer <token>
    'USER_ID_FIELD': 'id',                      #             ,               
    'USER_ID_CLAIM': 'user_id',
 
    # 'AUTH_TOKEN_CLASSES': ('rest_framework_simplejwt.tokens.AccessToken',),   # default: access
    # 'TOKEN_TYPE_CLAIM': 'token_type',         #                  value:'access','sliding','refresh'
    #
    # 'JTI_CLAIM': 'jti',
    #
    # 'SLIDING_TOKEN_REFRESH_EXP_CLAIM': 'refresh_exp',     #                         
    # 'SLIDING_TOKEN_LIFETIME': timedelta(minutes=5),       #                    ,           
    # 'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),  # path('token|refresh', TokenObtainSlidingView.as_view())
}
 5.사용자 정의 token 정보 되 돌리 기
 'users/serializers.py'에서 다음 코드 를 작성 합 니 다:

# simple/serializers.py
from rest_framework_simplejwt.serializers import TokenObtainPairSerializer
 
 
class MyTokenObtainPairSerializer(TokenObtainPairSerializer):
 
    def validate(self, attrs):
        data = super().validate(attrs)
        refresh = self.get_token(self.user)
        data['refresh'] = str(refresh)
        data['access'] = str(refresh.access_token)
        data['username'] = self.user.username
        return data
 'users/views.py'및'simple/urls.py'에서 다음 코드 를 작성 합 니 다:

# users/views.py
from rest_framework_simplejwt.views import TokenObtainPairView
from users.serializers import MyTokenObtainPairSerializer
 
 
class MyTokenObtainPairView(TokenObtainPairView):
    serializer_class = MyTokenObtainPairSerializer
 
# simple/urls.py
from users.views import MyTokenObtainPairView
 
urlpatterns = [
    ...
    # modify
    path('login/', MyTokenObtainPairView.as_view(), name='token_obtain_pair'),
]
API 를 테스트 하면 되 돌아 오 는 정보 에 username 정보 가 더 있 음 을 볼 수 있 습 니 다. 
http -f POST :8000/login/ username=admin password=123456

6.토 큰 수 동 발급 
수 동 으로 token 을 발급 하 는 것 은 주로 사용자 가 등록 한 상황 에 따라 사용자 가 등록 한 후에 바로 돌아 갑 니 다. token。
다음 코드 는 사용자 대상 에 게 수 동 으로 token 을 발급 하고 되 돌려 줍 니 다.(사용자 등록 동 리,즉 user 대상 은 등록 후 가 져 온 사용자)

# users/views.py
 
class MyView(APIView):
    permission_classes = [permissions.IsAuthenticated]
 
    def get(self, request, *args, **kwargs):
        return Response("Get information successfully!")
 
    def post(self, request, *args, **kwargs):
        refresh = RefreshToken.for_user(request.user)
        content = {
            'refresh': str(refresh),
            'access': str(refresh.access_token),
        }
        return Response(content)
Django RestFramework 에서 simpleJWT 로그 인 인증 전체 기록 을 사용 하 는 것 에 관 한 이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Django RestFramework 로그 인 인증 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!

좋은 웹페이지 즐겨찾기