Table des matières

Authentification

Vues d'authentification

documentation

Django fournit plusieurs vues permettant de gérer la connexion, la déconnexion et le traitement des mots de passe.

Nous aurons seulement à créer les templates, toute le reste de la logique est déjà implémentée par Django.

Pour les utiliser, il faut ajouter la route accounts dans le fichier urls.py du projet.

urlpatterns = [
    path('admin/', admin.site.urls),
    path('blogue/', include("blogue.urls")),
    path('accounts/', include('django.contrib.auth.urls')),
]

Cela comprendra les modèles d’URL suivants

accounts/login/ [name='login']
accounts/logout/ [name='logout']
accounts/password_change/ [name='password_change']
accounts/password_change/done/ [name='password_change_done']
accounts/password_reset/ [name='password_reset']
accounts/password_reset/done/ [name='password_reset_done']
accounts/reset/<uidb64>/<token>/ [name='password_reset_confirm']
accounts/reset/done/ [name='password_reset_complete']

Il faut ensuite créer les templates que l'on souhaite utiliser.

Dans le fichier de settings.py, ajouter le chemin où vont se trouver les templates de login, logout, traitement des mots de passe…

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [str(BASE_DIR.joinpath('templates'))],
        'APP_DIRS': True,

Créer les dossiers templates/registrationdirectement à la racine du projet.

C'est dans ce dossier que l'on crée les fichiers login.html, logout.html, password_change

Pour le moment, on utilise seulement un fichier login.html

La vue Login est accessible avec l'url http://127.0.0.1:8000/accounts/login/

Exemple de fichier login.html

<form method="post">
  {% csrf_token %}
  {{ form.as_p }}
  <button class="btn btn-primary" type="submit">
    Soumettre
  </button>
</form>

Modification des urls pour login, logout...

Dans le fichier settings.py, vous pouvez changer les valeurs par défaut de quelques constantes :

LOGIN_REDIRECT_URL

Valeur par défaut : '/accounts/profile/'

Si un utilisateur se connecte, il est redirigé par défaut sur la page accounts/profile/

Si vous n'avez pas de page profile, vous pouvez le rediriger sur la page d'accueil par exemple

LOGIN_REDIRECT_URL = '/'

LOGIN_URL

Valeur par défaut : '/accounts/login/'

L’URL ou le motif d’URL nommé vers lequel seront redirigées les requêtes pour la connexion.

LOGOUT_REDIRECT_URL

Valeur par défaut : None

L’URL ou le motif d’URL nommé vers lequel seront redirigées les requêtes après la déconnexion. Avec None, aucune redirection n’est effectuée et la vue de déconnexion logout sera produite.

Si vous souhaitez rediriger vers la page de login par exemple :

LOGOUT_REDIRECT_URL = '/accounts/login/'

Données d’authentification dans les gabarits

documentation

Dans un gabarit, pour vérifier si un utilisateur est connecté :

{% if user.is_authenticated %}
    <p>Welcome, {{ user.username }}. Thanks for logging in.</p>
{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}

Restriction d’accès aux utilisateurs connectés¶

La manière directe de limiter l’accès à certaines pages dans views.py est de vérifier request.user.is_authenticatedet de rediriger l’utilisateur vers la page de connexion le cas échéant :

from django.conf import settings
from django.shortcuts import redirect

def my_view(request):
    if not request.user.is_authenticated:
        return redirect('login')
    # ...

…ou d’afficher un message d’erreur :

from django.shortcuts import render

def my_view(request):
    if not request.user.is_authenticated:
        return render(request, 'myapp/login_error.html')
    # ...

Utiliser la table User de la base de données de Django

Documentation

Utilisation d’un modèle d’utilisateur personnalisé au départ d’un projet¶

Si vous démarrez un nouveau projet, il est fortement recommandé de définir un modèle d’utilisateur personnalisé, même si le modèle User par défaut convient à vos besoins. Ce modèle se comportera comme le modèle d’utilisateur par défaut, mais vous serez en mesure de le personnaliser plus tard si le besoin devait se présenter.

Il faut mettre en place cette configuration au démarrage d'un nouveau projet, avant de faire la première migration.

from django.contrib.auth.models import AbstractUser

class User(AbstractUser):
    pass

Dans le fichier settings.py, définir le modèle à utiliser pour la gestion des utilisateurs. Exemple :

AUTH_USER_MODEL = 'blogue.User'

Il y aura maintenant une table blogue_user dans la base de données qui sera utilisée par Django pour la gestion des utilisateurs.

De plus, inscrivez le modèle dans le fichier admin.py de l’application :

from django.contrib import admin
from django.contrib.auth.admin import UserAdmin
from .models import User

admin.site.register(User, UserAdmin)

la gestion des utilisateurs est maintenant dans la partie Blogue de l'administration.