Présentation du module d'authentification
Le module d'authentification intégré à Django fournit une solution complète pour gérer les utilisateurs de votre application web. Il permet de mettre en place des fonctionnalités essentielles telles que l'inscription, la connexion, la vérification d'identité, la déconnexion et la modification du mot de passe, sans avoir à concevoir ces composants manuellement.
Django utilise automatiquement une table nommée auth_user pour stocker les informations des utilisateurs. Cette table est créée par défaut lors de la configuraton initiale du projet.
# Création d'un superutilisateur via la ligne de commande
python3 manage.py createsuperuser
Ce système évite la nécessité de créer une table utilisateur personnalisée dès le départ.
Méthodes principales du module d'authentification
Pour accéder aux fonctions d'authentification, il faut importer :
from django.contrib import auth
- authenticate() : Vérifie si les identifiants (nom d'utilisateur et mot de passe) sont corrects. Retourne un objet
Usersi la validation réussit. - login(request, user) : Démarre une session pour l'utilisateur après authentification. Stocke les données de session côté serveur.
- logout(request) : Supprime toutes les données de session liées à l'utilisateur courant. Ne provoque pas d'erreur même si l'utilisateur n'est pas connecté.
- is_authenticated : Propriété disponible sur l'objet
request.userpour détecter si l'utilisateur est connecté. - login_required : Décorateur qui protège les vues en exigeant une authentification. Redirige vers une URL de login si nécessaire.
- create_user() : Méthode pour créer un nouvel utilisateur standard.
- create_superuser() : Méthode pour créer un administrateur avec tous les droits.
- check_password(password) : Vérifie si un mot de passe fourni correspond à celui de l'utilisateur.
- set_password(new_password) : Modifie le mot de passe. Obligatoire de sauvegarder l'objet utilisateur après modification.
Exemple d'utilisation de set_password
@login_required(login_url='/login/')
def modifier_mot_de_passe(request):
if request.method == 'POST':
ancien = request.POST.get('ancien')
nouveau = request.POST.get('nouveau')
confirmation = request.POST.get('confirmation')
if not request.user.check_password(ancien):
return HttpResponse("Ancien mot de passe incorrect.")
if nouveau != confirmation:
return HttpResponse("Les nouveaux mots de passe ne correspondent pas.")
request.user.set_password(nouveau)
request.user.save()
return redirect('/login/')
return render(request, 'modifier.html')
Attributs clés de l'objet User
username: Identifiant unique de l'utilisateur.password: Mot de passe chiffré.is_staff: Indique si l'utilisateur a accès au panneau d'administration.is_active: Permet ou interdit la connexion. Utile pour suspendre temporairement un compte.
Extension de la table auth_user
La table par défaut est fixe. Pour ajouter des champs personnalisés comme un numéro de téléphone, deux approches sont possibles :
- Relation OneToOne : Créer une table secondaire liée à
auth_user. - Héritage depuis AbstractUser : Définir un modèle personnalisé qui étend
AbstractUser.
Exemple d'héritage :
from django.contrib.auth.models import AbstractUser
from django.db import models
class CustomUser(AbstractUser):
phone = models.CharField(max_length=15, unique=True, null=True)
def __str__(self):
return self.username
Dans le fichier settings.py, indiquer à Django d'utiliser ce modèle :
AUTH_USER_MODEL = 'monapp.CustomUser'
⚠️ Important : Une fois cette configuraton activée, il faut supprimer la base de données existante et régénérer les migrations. Les anciennes tables ne peuvent plus être utilisées.
Architecture complète
Voici un exemple complet combinant :
- Héritage de
AbstractUser - Authentification basique
- Modification de mot de passe
- Gestion des permisssions administrateur
Les fichiers HTML incluent des interfaces Bootstrap pour la navigation, la connexion, l’inscription et la gestion des utilisateurs. Le backend Python implémente des vues sécurisées avec décorateurs @login_required et des contrôles rigoureux sur les entrées.
Les URLs sont configurées pour mapper chaque action à une vue spécifique.