DjangoRestFramework 는 simpleJWT 로그 인 인증 전체 기록 을 사용 합 니 다.
7708 단어 DjangoRestFrameworksimpleJWT인증
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 로그 인 인증 내용 은 우리 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 조회 하 시기 바 랍 니 다.앞으로 많은 응원 부탁드립니다!