L’intégration de l’authentification sociale dans une application Django permet aux utilisateurs de se connecter rapidement en utilisant leurs comptes existants sur des plateformes telles que Facebook, Twitter ou GitHub. Dans cet article, nous allons voir comment configurer cette fonctionnalité à l’aide de la bibliothèque social-auth-app-django, l’une des plus complètes et flexibles pour gérer l’OAuth dans Django.
social-auth-app-django
Commencez par installer la dépendance via pip :
pip
pip install social-auth-app-django
Ajoutez ensuite l’application dans la configuration INSTALLED_APPS de votre projet :
INSTALLED_APPS
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'social_django', # <-- Authentification sociale 'mysite.core', ]
Appliquez ensuite les migrations :
python manage.py migrate
Ajoutez le middleware SocialAuthExceptionMiddleware à la fin de la liste :
SocialAuthExceptionMiddleware
MIDDLEWARE = [ 'django.middleware.security.SecurityMiddleware', 'django.contrib.sessions.middleware.SessionMiddleware', 'django.middleware.common.CommonMiddleware', 'django.middleware.csrf.CsrfViewMiddleware', 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', 'social_django.middleware.SocialAuthExceptionMiddleware', # <-- ]
Dans la section TEMPLATES, ajoutez les deux context processors suivants :
TEMPLATES
'social_django.context_processors.backends', 'social_django.context_processors.login_redirect',
Dans votre fichier settings.py, précisez les backends utilisés :
settings.py
AUTHENTICATION_BACKENDS = ( 'social_core.backends.github.GithubOAuth2', 'social_core.backends.twitter.TwitterOAuth', 'social_core.backends.facebook.FacebookOAuth2', 'django.contrib.auth.backends.ModelBackend', )
Ces backends permettent de gérer la connexion via GitHub, Twitter et Facebook.
Dans votre fichier urls.py, ajoutez les routes liées à Social Auth :
urls.py
from django.conf.urls import url, include from django.contrib import admin from django.contrib.auth import views as auth_views from mysite.core import views as core_views urlpatterns = [ url(r'^$', core_views.home, name='home'), url(r'^login/$', auth_views.LoginView.as_view(), name='login'), url(r'^logout/$', auth_views.LogoutView.as_view(), name='logout'), url(r'^oauth/', include('social_django.urls', namespace='social')), # <-- url(r'^admin/', admin.site.urls), ]
LOGIN_URL = 'login' LOGOUT_URL = 'logout' LOGIN_REDIRECT_URL = 'home'
Créez une vue simple qui affiche le nom d’utilisateur connecté :
from django.contrib.auth.decorators import login_required from django.shortcuts import render @login_required def home(request): return render(request, 'core/home.html')
Et le template home.html :
home.html
{% extends 'base.html' %} {% block content %} <h2>Accueil</h2> <p>Bonjour {{ user.username }} !</p> {% endblock %}
Pour permettre la connexion via GitHub, rendez-vous sur GitHub Developer Settings et créez une nouvelle application OAuth.
Utilisez l’URL de rappel suivante :
http://localhost:8000/oauth/complete/github/
Après création, récupérez votre Client ID et Client Secret, puis ajoutez-les dans settings.py :
SOCIAL_AUTH_GITHUB_KEY = 'YOUR_CLIENT_ID' SOCIAL_AUTH_GITHUB_SECRET = 'YOUR_CLIENT_SECRET'
{% extends 'base.html' %} {% block content %} <h2>Connexion</h2> <form method="post"> {% csrf_token %} {{ form.as_p }} <button type="submit">Se connecter</button> </form> <p><strong>Ou connectez-vous avec :</strong></p> <a href="{% url 'social:begin' 'github' %}">GitHub</a> {% endblock %}
Dès qu’un utilisateur se connecte via GitHub, Django crée automatiquement un compte associé. S’il n’a pas encore de mot de passe, il pourra en définir un plus tard via la page des paramètres.
Connectez-vous sur developer.twitter.com et créez une nouvelle application. Définissez le Callback URL comme suit :
http://localhost:8000/oauth/complete/twitter/
Ajoutez ensuite les clés dans settings.py :
SOCIAL_AUTH_TWITTER_KEY = 'YOUR_API_KEY' SOCIAL_AUTH_TWITTER_SECRET = 'YOUR_API_SECRET'
Et mettez à jour le template de connexion :
<a href="{% url 'social:begin' 'twitter' %}">Twitter</a>
Sur developers.facebook.com, créez une nouvelle application et configurez l’URL de site :
http://localhost:8000
Ajoutez les identifiants Facebook à vos paramètres :
SOCIAL_AUTH_FACEBOOK_KEY = 'YOUR_APP_ID' SOCIAL_AUTH_FACEBOOK_SECRET = 'YOUR_APP_SECRET'
Et ajoutez un lien dans le template :
<a href="{% url 'social:begin' 'facebook' %}">Facebook</a>
Vous pouvez proposer une page “Paramètres” à l’utilisateur pour gérer ses connexions sociales : ajouter, supprimer ou définir un mot de passe.
@login_required def settings(request): user = request.user github_login = user.social_auth.filter(provider='github').first() twitter_login = user.social_auth.filter(provider='twitter').first() facebook_login = user.social_auth.filter(provider='facebook').first() can_disconnect = user.social_auth.count() > 1 or user.has_usable_password() return render(request, 'core/settings.html', { 'github_login': github_login, 'twitter_login': twitter_login, 'facebook_login': facebook_login, 'can_disconnect': can_disconnect, })
Le template associé permettra de connecter ou déconnecter chaque service selon l’état de l’utilisateur.
Grâce à social-auth-app-django, l’intégration de l’authentification via des services tiers devient rapide et sécurisée. Cette approche améliore l’expérience utilisateur et réduit la friction lors de la création de compte.
Pour aller plus loin, il est recommandé d’utiliser un fichier .env pour sécuriser vos identifiants OAuth et de consulter la documentation officielle.
.env
Découvrez nos actualités, conseils et tutoriels pour rester à jour
Dans le monde Python, Celery est un outil popul...
FastAPI est un framework Python moderne qui per...
Découvre Capacitor, le dernier-né...
Le langage de programmation Python est en t&eci...
Inscription en cours...
Restez informé de nos dernières actualités et recevez nos meilleurs conseils !
Chargement du formulaire de devis...