Crée un système d’authentification Django avec une vérification par email
Créer un système d’authentification Django avec une vérification par email est une tâche courante pour sécuriser les comptes utilisateur. Voici un tutoriel détaillé pour mettre en place cette fonctionnalité.
Prérequis :
- Python installé sur votre système.
- Django installé. Vous pouvez l’installer avec
pip install django
.
Étapes pour créer un système d’authentification Django avec vérification par email :
Étape 1 : Création du projet Django
Commencez par créer un nouveau projet Django nommé « auth_project » avec la commande suivante :
django-admin startproject auth_project
cd auth_project
Étape 2 : Création de l’application Django
Ensuite, créez une nouvelle application Django appelée « auth_app » avec la commande suivante :
python manage.py startapp auth_app
Étape 3 : Configuration de la base de données
Ouvrez le fichier auth_project/settings.py
et configurez votre base de données, puis exécutez les migrations pour créer les tables de base de données :
python manage.py migrate
Étape 4 : Configuration de l’authentification par email
Dans le fichier auth_project/settings.py
, ajoutez la configuration d’authentification par email :
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend',
'auth_app.backends.EmailBackend', # Ajoutez cette ligne
]
AUTH_USER_MODEL = 'auth_app.CustomUser'
LOGIN_REDIRECT_URL = '/'
LOGOUT_REDIRECT_URL = '/'
# Configurez l'envoi d'e-mails avec SMTP ou d'autres méthodes selon vos besoins
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
EMAIL_HOST = 'your-smtp-server.com'
EMAIL_PORT = 587
EMAIL_USE_TLS = True
EMAIL_HOST_USER = 'your-email@example.com'
EMAIL_HOST_PASSWORD = 'your-email-password'
Étape 5 : Création du modèle utilisateur personnalisé
Dans le fichier auth_app/models.py
, créez un modèle utilisateur personnalisé en étendant AbstractUser
. Vous pouvez ajouter des champs personnalisés au modèle utilisateur si nécessaire :
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
email = models.EmailField(unique=True) # Champ d'email unique
email_verified = models.BooleanField(default=False) # Vérification de l'e-mail
def __str__(self):
return self.username
Étape 6 : Création des vues et des URL
Créez des vues pour l’inscription, la connexion, la vérification de l’e-mail et la réinitialisation du mot de passe dans le fichier auth_app/views.py
. Vous pouvez utiliser le package django-allauth
pour simplifier la gestion de l’authentification par email.
Créé le fichier views.py
pour une application Django gérant l’authentification par e-mail avec django-allauth
. Ce fichier inclut des vues pour l’inscription, la connexion, la vérification de l’e-mail et la réinitialisation du mot de passe :
from django.contrib.auth.decorators import login_required
from django.contrib.sites.shortcuts import get_current_site
from django.http import HttpResponse
from django.shortcuts import render, redirect
from django.template.loader import render_to_string
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode
from django.utils.encoding import force_bytes, force_text
from django.contrib.auth.tokens import default_token_generator
from django.contrib.auth import login, authenticate
from django.core.mail import EmailMessage
from django.contrib.auth.forms import PasswordChangeForm
from django.contrib import messages
from django.contrib.auth.views import LoginView, LogoutView, PasswordResetView, PasswordResetConfirmView
from django.views import View
from allauth.account.forms import SignupForm
from allauth.account.views import SignupView
from allauth.account.utils import complete_signup
from allauth.account.models import EmailAddress
from allauth.account.adapter import get_adapter
from allauth.account import app_settings
from allauth.utils import get_next_redirect_url
from allauth.socialaccount.forms import DisconnectForm
from allauth.socialaccount import providers
from allauth.exceptions import ImmediateHttpResponse
from allauth.account.views import PasswordChangeView
class MySignupView(SignupView):
template_name = 'registration/signup.html'
def form_valid(self, form):
if not self.request.user.is_anonymous:
return redirect('home')
if app_settings.SIGNUP_VERIFICATION:
# # # # Activation email sending #
self.user = form.save(self.request)
if app_settings.SIGNUP_EMAIL_ENTER_TWICE:
email_address = EmailAddress.objects.get(user=self.user,
email=form.cleaned_data['email'])
else:
email_address = EmailAddress.objects.get(user=self.user)
get_adapter(self.request).add_message(self.request,
messages.SUCCESS,
'account/messages/' 'verification_sent.txt',
{'email': self.user.email})
signals.user_signed_up.send(sender=self.user.__class__,
request=self.request,
user=self.user)
return redirect('account_signup_verification')
else:
# # # # Directly log the user in #
self.user = form.save(self.request)
# Automatically log the user in.
if hasattr(self, 'action'):
# There is no action for the setup view.
login(self.request, self.user)
else:
self.login_by_request(self.user)
return complete_signup(
self.request,
self.user,
app_settings.EMAIL_VERIFICATION,
self.get_success_url())
class MyLoginView(LoginView):
template_name = 'registration/login.html'
class MyLogoutView(LogoutView):
next_page = 'login'
class MyPasswordChangeView(PasswordChangeView):
template_name = 'registration/password_change_form.html'
success_url = '/'
class MyPasswordResetView(PasswordResetView):
template_name = 'registration/password_reset_form.html'
class MyPasswordResetConfirmView(PasswordResetConfirmView):
template_name = 'registration/password_reset_confirm.html'
@login_required
def home(request):
return render(request, 'home.html')
Ce fichier views.py
comprend des vues pour l’inscription, la connexion, la déconnexion, la réinitialisation du mot de passe, et l’affichage de la page d’accueil. Assurez-vous d’ajuster les templates et les URL en conséquence dans votre projet.
N’oubliez pas de configurer correctement vos URL pour utiliser ces vues personnalisées, comme indiqué dans l’étape 8 du tutoriel précédent.
pip install django-allauth
Dans le fichier auth_project/settings.py
, ajoutez 'allauth'
et 'allauth.account'
à la liste INSTALLED_APPS
:
INSTALLED_APPS = [
# ...
'allauth',
'allauth.account',
# ...
]
Étape 7 : Configuration d’allauth
Dans le fichier auth_project/settings.py
, configurez allauth
:
AUTHENTICATION_CLASSES = (
# ...
'allauth.account.auth_backends.AuthenticationBackend',
# ...
)
AUTHENTICATION_CLASSES = (
'django.contrib.auth.backends.ModelBackend', # Gardez cette ligne
'allauth.account.auth_backends.AuthenticationBackend',
)
Étape 8 : Configuration de l’URL de l’application
Dans le fichier auth_app/urls.py
, configurez les URL pour les vues d’inscription, de connexion, de vérification de l’e-mail et de réinitialisation du mot de passe :
from django.urls import path
from django.contrib.auth.decorators import login_required
from . import views
urlpatterns = [
path('', views.home, name='home'),
# Vues d'authentification
path('signup/', views.MySignupView.as_view(), name='signup'),
path('login/', views.MyLoginView.as_view(), name='login'),
path('logout/', views.MyLogoutView.as_view(), name='logout'),
path('password_change/', views.MyPasswordChangeView.as_view(), name='password_change'),
path('password_reset/', views.MyPasswordResetView.as_view(), name='password_reset'),
path('reset/<uidb64>/<token>/', views.MyPasswordResetConfirmView.as_view(), name='password_reset_confirm'),
]
Dans ce fichier urls.py
, nous avons configuré les URL pour les vues d’authentification telles que l’inscription, la connexion, la déconnexion, la réinitialisation du mot de passe, et la page d’accueil.
Assurez-vous d’ajuster les noms des vues et les chemins d’URL en fonction de votre projet, et assurez-vous que les noms des vues correspondent aux noms utilisés dans votre fichier views.py
.
Étape 9 : Création des templates HTML
Créez des templates HTML pour les vues d’inscription, de connexion et de vérification de l’e-mail dans le répertoire auth_app/templates
. Par exemple, signup.html
:
{% extends 'base.html' %}
{% block content %}
<h2>Inscription</h2>
<form method="post">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Inscription</button>
</form>
{% endblock %}
Étape 10 : Exécution de l’application
Exécutez votre application Django en utilisant la commande suivante :
python manage.py runserver
Vous pouvez maintenant accéder à votre application de gestion d’authentification à l’adresse http://127.0.0.1:8000/.
110 commentaires