Aller au contenu principal

Quickstart Django

Ajoutez l'authentification à votre application Django en 5 minutes en utilisant le paquet django-syauth.


Avant de commencer

info

Vous avez besoin de ces identifiants avant de commencer. Obtenez-les depuis le Tableau de bord SyAuth.

Ce dont vous avez besoinOù le trouverExemple
Client IDTableau de bord → Clients OAuth → Votre Appa1b2c3d4-5678-90ab-cdef-...
Clé APITableau de bord → Clés APIxxxxxxxxxxxxx

Nouveau sur SyAuth ? Suivez d'abord ces étapes :

  1. Créez un compte Nexorix (SyAuth utilise Nexorix pour l'authentification)
  2. Créez votre première Application pour obtenir vos identifiants
  3. Choisissez le type Client Public (recommandé, utilise PKCE)
  4. Ajoutez http://localhost:8000/auth/callback/ comme URI de redirection

Prérequis

  • Python 3.8+ et Django 4.2+
  • Un compte SyAuth avec une Application créée

Étape 1 : Installer le SDK

pip install django-syauth

Ce paquet gère l'authentification OAuth, la gestion des tokens et la création d'utilisateur automatiquement.


Étape 2 : Configurer les Paramètres

Mettez à jour votre settings.py avec la configuration SyAuth :

# settings.py

INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
# Ajouter django_syauth
'django_syauth',
]

# Ajouter le backend d'authentification SyAuth
AUTHENTICATION_BACKENDS = [
'django.contrib.auth.backends.ModelBackend', # Garder pour l'accès admin
'django_syauth.backend.SyAuthBackend', # Ajouter l'authentification SyAuth
]

# Configuration SyAuth
# Obtenez ces valeurs depuis Tableau de bord → Clients OAuth → Votre App
SYAUTH = {
# L'endpoint API SyAuth (inclure /e/v1 à la fin)
'API_URL': 'https://api.syauth.com/e/v1',

# Votre Client ID depuis le Tableau de bord
'CLIENT_ID': 'votre-client-id-ici',

# Votre Clé API depuis Tableau de bord → Clés API
'API_KEY': 'votre-cle-api-ici',

# Où SyAuth redirige après la connexion - doit correspondre à la config du Tableau de bord !
'REDIRECT_URI': 'http://localhost:8000/auth/callback/',
}

# Paramètres de connexion/déconnexion Django
LOGIN_URL = '/auth/login/' # Rediriger ici quand @login_required échoue
LOGIN_REDIRECT_URL = '/' # Rediriger ici après connexion réussie
LOGOUT_REDIRECT_URL = '/' # Rediriger ici après déconnexion

Paramètres de Configuration

ParamètreRequisDescription
API_URLEndpoint API SyAuth. Toujours inclure /e/v1 à la fin
CLIENT_IDIdentifiant public de votre application depuis le Tableau de bord
API_KEYVotre Clé API d'espace de travail pour les opérations backend
REDIRECT_URIDoit correspondre exactement à l'URI de redirection dans votre Tableau de bord
astuce

Bonne pratique de production : Utilisez des variables d'environnement pour les secrets :

import os

SYAUTH = {
'API_URL': os.environ.get('SYAUTH_API_URL'),
'CLIENT_ID': os.environ.get('SYAUTH_CLIENT_ID'),
'API_KEY': os.environ.get('SYAUTH_API_KEY'),
'REDIRECT_URI': os.environ.get('SYAUTH_REDIRECT_URI'),
}

Étape 3 : Configurer les URLs

Ajoutez les routes d'authentification SyAuth au urls.py de votre projet :

# votre_projet/urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
path('admin/', admin.site.urls),

# Ajouter les routes d'authentification SyAuth
path('auth/', include('django_syauth.urls')),

# Routes de votre application...
path('', include('votre_app.urls')),
]

Ce que cela ajoute :

URLObjectif
/auth/login/Redirige vers la page de Login Universel SyAuth
/auth/callback/Gère le callback OAuth, échange le code contre des tokens, crée/met à jour l'utilisateur
/auth/logout/Déconnecte l'utilisateur de Django et SyAuth

Étape 4 : Créer les Liens de Connexion/Déconnexion

Ajoutez des liens de connexion et déconnexion à vos templates :

<!-- templates/base.html -->
<!DOCTYPE html>
<html>
<head>
<title>Mon App Django</title>
</head>
<body>
<nav>
{% if user.is_authenticated %}
<span>Bienvenue, {{ user.first_name }} !</span>
<a href="{% url 'syauth:logout' %}">Se déconnecter</a>
{% else %}
<a href="{% url 'syauth:login' %}">Se connecter</a>
{% endif %}
</nav>

<main>
{% block content %}{% endblock %}
</main>
</body>
</html>

Étape 5 : Protéger les Vues

Utilisez le décorateur standard Django @login_required pour protéger les vues :

# views.py
from django.contrib.auth.decorators import login_required
from django.shortcuts import render

@login_required
def dashboard(request):
# request.user est un objet User Django standard
# peuplé avec les données de SyAuth (email, prenom, nom)
return render(request, 'dashboard.html', {
'user': request.user
})

@login_required
def profile(request):
return render(request, 'profile.html', {
'email': request.user.email,
'first_name': request.user.first_name,
'last_name': request.user.last_name,
})

Pour les vues basées sur les classes, utilisez LoginRequiredMixin :

from django.contrib.auth.mixins import LoginRequiredMixin
from django.views.generic import TemplateView

class DashboardView(LoginRequiredMixin, TemplateView):
template_name = 'dashboard.html'

Comment ça marche : Quand un utilisateur non authentifié essaie d'accéder à une vue protégée, Django le redirige automatiquement vers /auth/login/, qui redirige vers SyAuth. Après connexion, il est renvoyé vers sa destination d'origine.


Testez Votre Intégration

  1. Exécutez les migrations (si nécessaire) :

    python manage.py migrate
  2. Démarrez le serveur de développement :

    python manage.py runserver
  3. Ouvrez http://localhost:8000

  4. Cliquez sur "Se connecter"

    • Vous serez redirigé vers la page de connexion SyAuth
    • Connectez-vous ou créez un compte
    • Vous serez redirigé vers votre application, maintenant authentifié !

Terminé ! 🎉

Votre application Django a maintenant :

  • ✅ Authentification OAuth 2.0 avec PKCE
  • ✅ Création et synchronisation automatique des utilisateurs
  • ✅ Gestion de session
  • ✅ Vues protégées avec @login_required
  • ✅ Intégration User Django standard

Configuration Avancée

Modèle Utilisateur Personnalisé

Si vous utilisez un modèle utilisateur personnalisé, django-syauth le détecte et l'utilise automatiquement. Assurez-vous que votre modèle a ces champs :

# models.py
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
# Ces champs sont requis pour l'intégration SyAuth
email = models.EmailField(unique=True)
first_name = models.CharField(max_length=150)
last_name = models.CharField(max_length=150)

# Vous pouvez ajouter des champs supplémentaires
avatar_url = models.URLField(blank=True)

Mapping de Claims Personnalisé

Mappez des claims supplémentaires du token ID vers les champs de votre modèle utilisateur :

# settings.py
SYAUTH = {
'API_URL': 'https://api.syauth.com/e/v1',
'CLIENT_ID': 'votre-client-id',
'REDIRECT_URI': 'http://localhost:8000/auth/callback/',

# Mapper les claims JWT vers les champs du modèle utilisateur
'CLAIMS_MAPPING': {
'picture': 'avatar_url', # Mappe le claim 'picture' → champ 'avatar_url'
'locale': 'language', # Mappe le claim 'locale' → champ 'language'
},
}

Dépannage

Erreur "Invalid redirect_uri"

Cause : L'REDIRECT_URI dans les paramètres ne correspond pas à la configuration de votre Tableau de bord.

Solution :

  1. Allez dans Tableau de bord → Clients OAuth → Votre App → URIs de redirection
  2. Assurez-vous que http://localhost:8000/auth/callback/ est listé (notez le slash final !)
  3. L'URI doit correspondre exactement

Erreur "Unauthorized / Invalid Client"

Cause : Votre Application n'est pas configurée comme Client Public ou le Client ID est incorrect.

Solution :

  1. Allez dans Tableau de bord → Clients OAuth → Votre App.
  2. Assurez-vous que Type de Client est défini sur Public (requis pour le flux PKCE).
  3. Vérifiez que le CLIENT_ID dans vos paramètres correspond à celui du Tableau de bord.

Utilisateur Non Créé Après Connexion

Cause : Champs requis manquants dans votre modèle utilisateur personnalisé.

Solution : Assurez-vous que votre modèle utilisateur a les champs email, first_name, et last_name.

La Session Expire Immédiatement

Cause : Middleware de session mal configuré.

Solution : Assurez-vous que django.contrib.sessions.middleware.SessionMiddleware est dans votre paramètre MIDDLEWARE.


Prochaines Étapes