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.

1. Installation de la bibliothèque

Commencez par installer la dépendance via pip :

pip install social-auth-app-django

Ajoutez ensuite l’application dans la configuration INSTALLED_APPS de votre projet :

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

2. Configuration du middleware et des context processors

Ajoutez le middleware SocialAuthExceptionMiddleware à la fin de la liste :

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 :

'social_django.context_processors.backends',
'social_django.context_processors.login_redirect',

3. Définition des backends d’authentification

Dans votre fichier settings.py, précisez les backends utilisés :

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.

4. Configuration des routes

Dans votre fichier urls.py, ajoutez les routes liées à Social Auth :

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),
]

5. Redirections après connexion

LOGIN_URL = 'login'
LOGOUT_URL = 'logout'
LOGIN_REDIRECT_URL = 'home'

6. Création de la vue principale

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 :

{% extends 'base.html' %}
{% block content %}
  <h2>Accueil</h2>
  <p>Bonjour {{ user.username }} !</p>
{% endblock %}

Authentification GitHub

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'

7. Création du template de connexion

{% 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.

Authentification Twitter

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>

Authentification Facebook

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>

Gestion des connexions sociales

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.

Conclusion

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.

Auteur: Mvondo bekey anael

ceo | founder
COMPETENCES
  • • Maitrise des environnements Unix, Linux, Mac, Windows, IOS et Android
  • • Programmation Orientée Objet : Python, Ruby, C++, Java, PHP, Js
  • • Certifier linux Lpi (101, 102, 202, 203, 301, 303)
  • • Certifier Adwords Professional , Certifier Ceh (6, 7, 8, 9, 10, 11)
  • • Maîtrise parfaite de : Docker, VMware sphère, Microsoft Hyper, Citrix, Virtual box,promox vm