Django Rest Framework JWT를 사용하여 계정 관리!

9420 단어 파이썬장고DRFJWT


소개



최근, Backend의 API를 만드는 곳은 Django로 만들어 보는 것이 많아, 그 중에서 인증합니다만,
Django Rest Framework JWT라는 것이 사용하기 쉬웠으므로 소개합니다.

Django Rest Framework JWT는 이름대로 Django Rest Framework에서 지원되므로
쉽게 통합할 수 있을까 생각합니다.

환경



파이썬 - 3.8.6
장고 - 3.1.4

최소한의 시작 방법



장고 애플리케이션 만들기


$  pip install djangorestframework-jwt
$ django-admin startproject mysite
$ python manage.py startapp polls

설정 파일 편집



settings.py
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
    ),
}

urls.py
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-token-auth/', obtain_jwt_token),
]

데이터베이스 마이그레이션


$ python manage.py makemigrations
$ python manage.py migrate
# 例としてパスワードは「password123」
$ python manage.py createsuperuser --username admin --email ""

Django 애플리케이션 시작


$ python manage.py runserver

토큰 발급


$ curl -X POST -d "username=admin&password=password123" http://localhost:8000/api-token-auth/

반환값의 "token"의 값 부분이 토큰이 됩니다.

토큰으로 인증 돌파


# -*- coding: utf-8 -*-

from rest_framework.response import Response
from rest_framework.status import HTTP_200_OK, HTTP_401_UNAUTHORIZED
from rest_framework.views import APIView

from app.api.types import Request


class UserApi(APIView):
    def get(self, request: Request) -> Response:
        if not request.user.is_authenticated:
            return Response(status=HTTP_401_UNAUTHORIZED)

        response = {'username': request.user.username}
        return Response(response, status=HTTP_200_OK)

이런 느낌의 진입점을 만들었다고 합니다.

거기에 대해,
$ curl -H "Authorization: JWT <your_token>" http://localhost:8000/user/

와 같이 리퀘스트 하는 것으로 인증을 실시해, 엔트리 포인트에의 리퀘스트가 가능해집니다.

토큰 재설정



설정 파일 편집



urls.py
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-token-auth/', obtain_jwt_token),
    path('api-token-refresh/', refresh_jwt_token),
]

토큰 재설정


$ curl -X POST -H "Content-Type: application/json" -d '{"token":"<EXISTING_TOKEN>"}' http://localhost:8000/api-token-refresh/

토큰 확인



설정 파일 편집



urls.py
from django.contrib import admin
from django.urls import path
from rest_framework_jwt.views import obtain_jwt_token, refresh_jwt_token, verify_jwt_token

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api-token-auth/', obtain_jwt_token),
    path('api-token-refresh/', refresh_jwt_token),
    path('api-token-verify/', verify_jwt_token),
]

토큰 확인


$ curl -X POST -H "Content-Type: application/json" -d '{"token":"<EXISTING_TOKEN>"}' http://localhost:8000/api-token-verify/

결론



어땠어?
실제로 시도하지 않아도 이해할 수 있을 정도로 심플한 만들기라고 생각합니다.

그 밖에도 세세한 설정은 가능합니다만, 그 주변은 여기 를 확인해 주십시오.

더 좋은 계정 관리 방법 등이 있으면 꼭 알려주세요!

htps : //에서. 코 m/료카_인
이 사이트에서 일부 기사를 선행하여 유료 공개하고 있습니다. 꼭 봐 주세요.

참고

좋은 웹페이지 즐겨찾기