3.2 KiB
title, author
title | author |
---|---|
Django | Steve Kossouho |
L'authentification et les utilisateurs
L'application d'authentification de Django
Django fournit directement dans le framework une application de gestion de l'authentification, avec les modèles associés. Généralement, ces modèles sont utilisés dans tout projet Django, et reconnus par toutes les applications tierces Django qui utilisent l'authentification ou les utilisateurs.
Cette application est django.contrib.auth
. Lorsqu'on l'utilise avec certains middleware ainsi que django.contrib.session
, on a de bons outils pour se connecter en tant qu'une instance d'utilisateur de notre base.
S'authentifier programmatiquement
Django fournit plusieurs fonctions pour se dé/connecter en tant qu'une instance de User
:
(Dans django.contrib.auth
)
authenticate
login
logout
authenticate
permet de savoir si des identifiants de connexion sont valides. Par exemple :
from django.contrib.auth import login, logout, authenticate
user = authenticate(username="…", password="…") # ou email
S'ils le sont, la fonction renvoie l'utilisateur concerné, sinon la fonction renvoie None
.
login
modifie la session HTTP pour indiquer que nous sommes connecté en tant qu'un utilisateur. (nous avons donc
besoin d'un objet request
)
from django.contrib.auth import login, logout, authenticate
login(request, user) # user est une instance du modèle User
logout
déconnecte tout utilisateur connecté dans la session.
Grâce aux middleware et aux processeurs de contexte, depuis les vues ou dans les templates, on peut accéder facilement à l'instance de l'utilisateur actuellement connecté :
def view(request):
print(request.user)
{{ user }} {# ou request.user puisque request est aussi dispo #}
S'authentifier avec un formulaire
Django propose plusieurs vues pour gérer l'authentification, qui rendent des templates trouvés dans un répertoire registration
(qu'il faut généralement redéfinir pour adapter le rendu de la page et du formulaire).
On peut aussi s'authentifier manuellement en créant une simple vue utilisant un formulaire standard...
Ce formulaire utiliserait authenticate
pour valider les champs et afficher une erreur si nécessaire. La vue réutiliserait authenticate
une fois le formulaire valide pour récupérer un utilisateur et le connecter.
Considérations sur les mots de passe
Django enregistre normalement les utilisateurs en chiffrant le mot de passe. Cela se fait en interne en utilisant la clé secrète du paramètre SECRET_KEY
.
Si l'on manipule une instance du modèle utilisateur pour modifier son mot de passe et qu'on y assigne une valeur en clair, elle sera enregistrée en clair dans la base de données.
Pour chiffrer correctement le mot de passe, il faut utiliser user.set_password()
qui utilise le chiffrage.
Commandes pour l'authentification
changepassword <username>
: changer un mot de passecreatesuperuser
: créer un utilisateur qui a tous les droits (et accès à l'admin entre autres). Cet utilisateur possède.is_superuser == True