Maison >développement back-end >Tutoriel Python >Guide étape par étape de l'authentification utilisateur avec Django, Djoser et JWT : partie I
L'authentification et la gestion des utilisateurs sont des fonctionnalités fondamentales lors du démarrage d'un nouveau projet. Ces tâches étant souvent répétées, divers packages ont été développés pour rationaliser le processus, permettant aux développeurs de se concentrer sur d'autres aspects de leurs projets. L'un de ces packages est Djoser, qui s'intègre parfaitement à Django REST Framework (DRF) pour gérer l'authentification et la gestion des utilisateurs. Dans ce guide, je vais vous guider dans la création d'un système d'authentification complet des utilisateurs à l'aide de Djoser, y compris la configuration de la fonctionnalité de messagerie et des modèles de courrier électronique personnalisés.
Commencez par créer un répertoire pour votre projet :
mkdir userauth
Accédez au nouveau répertoire dans votre IDE préféré, configurez un environnement virtuel et activez-le
python venv .venv source .venv/bin/activate
Ensuite, installez les packages nécessaires :
pip install django djangorestframework djoser djangorestframework_simplejwt social-auth-app-django drf-yasg
Remarque : Certaines dépendances, telles que social-auth-app-django, peuvent être installées automatiquement avec Djoser. Si tel est le cas, vous pouvez ignorer leur ajout explicite
Une fois installé, générez un fichier exigences.txt pour suivre vos dépendances :
pip freeze > requirements.txt
Vous devriez voir tous les packages installés répertoriés dans le fichier exigences.txt, y compris toutes les dépendances.
Créez le projet Django et faites fonctionner le serveur
django-admin startapp userauth .
Cela créera le projet Django. Nous devons ensuite créer une application dans notre projet
python manage.py startapp accounts
Le répertoire de votre projet devrait maintenant contenir les éléments suivants :
.venv (environnement virtuel)
comptes/ (application d'authentification)
userauth/ (dossier principal du projet)
manage.py
requirements.txt
Ajoutez les packages et applications requis à la section INSTALLED_APPS dans settings.py :
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Third Party Apps 'rest_framework', 'djoser', 'rest_framework_simplejwt', 'drf_yasg', # Local Apps 'accounts', ]
Mettez à jour votre settings.py pour inclure les configurations pour Django REST Framework et SimpleJWT :
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), }
Créons notre modèle utilisateur personnalisé depuis
créer le fichier managers.py dans le dossier des comptes
comptes/managers.py
from django.contrib.auth.models import BaseUserManager class CustomUserManager(BaseUserManager): def create_user(self, email, username, password=None, **extra_fields) -> None: if not username: raise ValueError("Username is required") if not email: raise ValueError("Email is required") email = self.normalize_email(email) user = self.model(email=email, username=username, **extra_fields) user.set_password(password) user.save() return user def create_superuser(self, email, username, password, **extra_fields): """ Create and save a SuperUser with the given email and password. """ extra_fields.setdefault("is_staff", True) extra_fields.setdefault("is_superuser", True) extra_fields.setdefault("is_active", True) if extra_fields.get("is_staff") is not True: raise ValueError("Superuser must have is_staff=True.") if extra_fields.get("is_superuser") is not True: raise ValueError("Superuser must have is_superuser=True.") return self.create_user(email, username, password, **extra_fields)
comptes/models.py
from django.db import models from django.contrib.auth.models import AbstractUser from accounts.managers import CustomUserManager class CustomUser(AbstractUser): username = None email = models.EmailField(unique=True) is_verified = models.BooleanField(default=False) USERNAME_FIELD = 'email' REQUIRED_FIELDS = [] objects = CustomUserManager() def __str__(self): return self.email
Ajoutez cette ligne dans votre fichier settings.py
AUTH_USER_MODEL = 'accounts.CustomUser'
Nous pouvons procéder à nos migrations puis exécuter le serveur de développement local
python manage.py makemigrations python manage.py migrate python manage.py runserver
Il ne devrait y avoir aucun problème jusqu'à présent.
Incluez les URL fournies par Djoser dans les modèles d'URL de votre projet, ainsi que la documentation Swagger pour l'API :
userauth/urls.py
from django.contrib import admin from django.urls import include, path from rest_framework import permissions from drf_yasg.views import get_schema_view from drf_yasg import openapi schema_view = get_schema_view( openapi.Info( title="User Accounts API", default_version="v1", description="REST implementation of Django authentication system using Djoser", contact=openapi.Contact(email="contact@snippets.local"), license=openapi.License(name="BSD License"), ), public=True, permission_classes=(permissions.AllowAny,), ) urlpatterns = [ path('admin/', admin.site.urls), path('api/docs', schema_view.with_ui("swagger", cache_timeout=0), name="swagger-ui"), path('api/', include('djoser.urls')), path('api/', include('djoser.urls.jwt')) ]
Allez sur http://127.0.0.1:8000/api/docs/ dans votre navigateur pour consulter la documentation de l'API.
Tous les paramètres pouvant être configurés pour Djoser peuvent être trouvés ici Paramètres de Djoser
userauth/settings.py
mkdir userauth
Ici, nous demandons aux utilisateurs de recevoir un e-mail d'activation. L'URL d'activation est le lien envoyé à l'e-mail de l'utilisateur pour qu'il puisse cliquer. Le jeton et l'uid doivent être extraits et une demande de publication envoyée avec eux comme corps de la route d'activation dans votre projet
Enfin, nous devons configurer l'envoi d'e-mails. J'utiliserai mailtrap pour l'envoi d'e-mails. Vous pouvez choisir d'envoyer l'e-mail à la console ou au service de messagerie de votre choix.
Pour envoyer l'e-mail à votre console
python venv .venv source .venv/bin/activate
Utilisation d'un service de messagerie externe
pip install django djangorestframework djoser djangorestframework_simplejwt social-auth-app-django drf-yasg
Remplacez les espaces réservés par les informations d'identification correctes
Pour tester cela, nous utiliserons Postman pour le tester.
Créer un nouvel utilisateur
Puis l'email d'activation envoyé à l'utilisateur
Personnalisons un peu le modèle d'e-mail
Créez un dossier de modèles dans le répertoire des comptes, puis créez un dossier de courrier électronique et continuez à y créer un dossier de modèles
comptes/templates/email/activation_email.py
Nous personnalisons l'e-mail par défaut fourni avec djoser
pip freeze > requirements.txt
Pour personnaliser le nom du site dans le modèle, ajoutez cette ligne au paramètre djoser
django-admin startapp userauth .
Le modèle d'e-mail ressemble maintenant à ceci
Pour la dernière partie de cet article, travaillons sur la vérification des emails.
Nous commençons par personnaliser la vue d'activation dans comptes/views.py :
comptes/views.py
python manage.py startapp accounts
Nous étendons la vue d'activation sur djoser pour la personnaliser et définissons le champ is_verified sur notre modèle utilisateur sur true
comptes/urls.py
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', # Third Party Apps 'rest_framework', 'djoser', 'rest_framework_simplejwt', 'drf_yasg', # Local Apps 'accounts', ]
Fichier Urls au niveau du projet
userauth/urls.py
REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES': ( 'rest_framework_simplejwt.authentication.JWTAuthentication', ), }
Pour tester cela, créez un nouvel utilisateur test et cliquez sur l'URL d'activation envoyée à l'e-mail.
Vous arrivez sur cette page, car l'url n'existe pas dans notre projet
à partir de l'url, extrayez l'uid et le jeton et faites une demande de publication sur la route d'activation que vous avez définie dans votre fichier comptes/urls.py
d'après la capture d'écran, mon itinéraire est :
mkdir userauth
L'uid est MTY
Le jeton est cil456-aaf8331efb885f0b4412f35ce544648c
Utilisation des paramètres pour faire une demande de publication sur le point de terminaison d'activation
Ceci conclut le tutoriel de configuration de l'authentification des utilisateurs avec Djoser. Vous disposez désormais d'un système d'authentification fonctionnel avec activation par e-mail et modèles personnalisables. Dans la deuxième partie de cette série, nous explorerons l'authentification sociale, permettant aux utilisateurs de s'inscrire et de se connecter à l'aide de services tiers tels que Google, Facebook et GitHub. Restez à l'écoute pour en savoir plus !
Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!