Sobes.tech
Middle
224

Comment fonctionne le système d'authentification dans Django?

Réponse de l'IA

sobes.tech IA

Dans Django, l'authentification repose sur un backend modulaire qui gère les utilisateurs, groupes et permissions.

Composants principaux:

  • Utilisateurs: Le modèle django.contrib.auth.models.User stocke les informations sur les utilisateurs (nom, mot de passe haché, email, etc.).
  • Groupes: Le modèle django.contrib.auth.models.Group regroupe les utilisateurs pour simplifier la gestion des permissions.
  • Permissions: Le modèle django.contrib.auth.models.Permission définit ce qu'un utilisateur est autorisé à faire (voir, ajouter, modifier, supprimer des modèles).
  • Backends d'authentification: Classes qui implémentent des méthodes pour authentifier (authenticate) et autoriser (get_user, has_perm, has_module_perms). Par défaut, django.contrib.auth.backends.ModelBackend est utilisé.

Processus d'authentification:

  1. L'utilisateur envoie son login et mot de passe (généralement via un formulaire).
  2. Django appelle la méthode authenticate() des backends configurés, en passant les identifiants.
  3. Le backend recherche l'utilisateur par login.
  4. Si l'utilisateur est trouvé, il vérifie le mot de passe (en comparant les hachages).
  5. En cas de succès, authenticate() retourne l'objet utilisateur.
  6. Django appelle login() (dans la vue ou middleware), qui établit la session pour l'utilisateur.

Exemple d'utilisation dans une vue:

# views.py
from django.contrib.auth import authenticate, login
from django.shortcuts import render, redirect

def login_view(request):
    if request.method == 'POST':
        username = request.POST.get('username')
        password = request.POST.get('password')
        user = authenticate(request, username=username, password=password)

        if user is not None:
            login(request, user)
            return redirect('some_success_page')
        else:
            # Gestion de l'erreur d'authentification
            pass
    return render(request, 'login.html')

Fonctions principales et décorateurs pour vérifier l'authentification et les permissions:

  • @login_required: Décorateur pour les vues nécessitant une authentification.
  • @permission_required('app_label.permission_code'): Décorateur pour une permission spécifique.
  • user.is_authenticated: Vérifie si l'utilisateur est authentifié.
  • user.has_perm('app_label.permission_code'): Vérifie si l'utilisateur possède une permission.
  • user.has_module_perms('app_label'): Vérifie si l'utilisateur a des permissions sur un module.

Configuration:

  • AUTHENTICATION_BACKENDS: Liste des backends enregistrés. Par défaut: ['django.contrib.auth.backends.ModelBackend'].
  • LOGIN_URL: URL de redirection pour les utilisateurs non authentifiés.
  • LOGIN_REDIRECT_URL: URL de redirection après une connexion réussie.