[PYTHON] Authentification facile des utilisateurs et authentification par jeton avec djangorestframework-jwt

Je suis un développeur chinois. J'ai travaillé à Hamamatsucho, Tokyo pendant environ un an. Ravi de vous rencontrer.

Présentation de djangorestframework-jwt

djangorestframework-jwt est un package Django qui facilite l'authentification des utilisateurs et l'authentification des jetons.

Cet article vous montrera comment créer une API à l'aide de djangorestframework-jwt.

environnement OS:Win10 or CentOS Python:3.7 Django:3.1.2

Installation

Vous avez besoin de ces deux lilibrari.

$ pip install djangorestframework

$ pip install djangorestframework-jwt

enrobage

① Modifiez ou ajoutez ces codes dans settings.py

settings.py


import datetime

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'rest_framework',  # <--ajouter
    'my_app'
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'corsheaders.middleware.CorsMiddleware',
    'django.middleware.common.CommonMiddleware',
    # 'django.middleware.csrf.CsrfViewMiddleware',  <--Commenter
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
]

#Cadre d'authentification
REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated'
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'rest_framework.authentication.SessionAuthentication'
    )
}

JWT_AUTH = {
    #Définir la durée de validité du jeton
    'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=60 * 60 * 2)
}

② Insérez le code dans urls.py

Il y a deux API ici.

  1. userLogin est une API pour l'enregistrement et l'authentification des utilisateurs. Le frontal est une API qui envoie le nom d'utilisateur et le mot de passe au back-end par POST, l'enregistre, puis obtient le jeton. (Vous pouvez utiliser le super utilisateur admin django comme utilisateur et mot de passe.)

  2. getInfo est une API permettant d'obtenir des informations à l'aide de jetons après l'enregistrement de l'utilisateur.

urls.py


from django.urls import path
from my_app import views

urlpatterns = [
    path('userLogin/', views.user_login),
    path('getInfo/', views.get_info)
]

③ Insérez le code dans views.py

views.py


import json
from django.http import JsonResponse
from django.contrib.auth import authenticate, login
from rest_framework.decorators import api_view, authentication_classes, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework_jwt.authentication import JSONWebTokenAuthentication
from rest_framework_jwt.settings import api_settings


def user_login(request):
    obj = json.loads(request.body)
    username = obj.get('username', None)
    password = obj.get('password', None)

    if username is None or password is None:
        return JsonResponse({'code': 500, 'message': 'Nombre de demandes'})

    is_login = authenticate(request, username=username, password=password)
    if is_login is None:
        return JsonResponse({'code': 500, 'message': '账 numéro ou secret 蔙 误'})

    login(request, is_login)

    jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
    jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
    payload = jwt_payload_handler(is_login)
    token = jwt_encode_handler(payload)

    return JsonResponse(
        {
            'code': 200,
            'message': 'Inscription réussie',
            'data': {'token': token}
        }
    )


#Accorder l'authentification par jeton à l'API
@api_view(['GET'])
@permission_classes((IsAuthenticated,))
@authentication_classes((JSONWebTokenAuthentication,))
def get_info(request):
    data = 'some info'

    return JsonResponse(
        {
            'code': 200,
            'message': 'success',
            'data': data
        }
    )

Comment le frontal utilise l'API

Tout d'abord, utilisez userLogin dans POST pour obtenir un jeton.

Ensuite, utilisez getInfo avec Get pour demander JWT + le jeton obtenu précédemment dans le paramètre Authorization de Headers.

Exemple de frontal


token = 'abcdefg123456789'

authorization = 'JWT' + token

Cela permettra à getInfo d'être demandé.

Recommended Posts

Authentification facile des utilisateurs et authentification par jeton avec djangorestframework-jwt
Créez facilement des systèmes d'authentification, de gestion des utilisateurs et multilingues avec Flask-AppBuilder
Easy Slackbot avec Docker et Errbot
Processus d'authentification avec gRPC et authentification Firebase
Authentification de base, authentification Digest avec Flask
Émission de jetons d'authentification Firebase en Python et validation de jetons avec Fast API
Authentification sans mot de passe avec RDS et IAM (Python)
Scraping Web facile avec Python et Ruby
Django: enregistrez l'agent utilisateur et gérez-le avec l'administrateur
Easy X-Ray avec Lambda Layer et CloudFormation / sam-cli
Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 6] ~ Authentification utilisateur 2 ~
Faisons une application qui affaiblit les nerfs avec Vue.js et Django-Rest-Framework [Partie 5] ~ Authentification des utilisateurs ~
Plus de nouvelles méthodes d'authentification des utilisateurs avec Django REST Framework
IoT facile pour démarrer avec Raspeye et MESH
Apprentissage automatique facile avec scikit-learn et flask ✕ Application Web
Téléchargez facilement et partiellement mp4 avec python et youtube-dl!
Créer une API autour de l'authentification des utilisateurs avec Django REST Framework
Essai de reconnaissance faciale facile avec Jetson Nano et caméra Web
[Python] Obtenez des informations sur les utilisateurs et des articles sur l'API de Qiita
Débogage facile avec ipdb
Avec et sans WSGI
TopView facile avec OpenCV
J'ai essayé la gestion du suivi avec l'API Twitter et Python (facile)
Créer une fonction d'authentification à l'aide de django-allauth et CustomUser dans Django