Maison  >  Article  >  développement back-end  >  Programmation serveur Python : utiliser Django-allauth pour implémenter l'authentification OAuth

Programmation serveur Python : utiliser Django-allauth pour implémenter l'authentification OAuth

王林
王林original
2023-06-18 11:27:071381parcourir

L'authentification et l'autorisation des utilisateurs sont des facteurs très importants dans les applications Internet modernes. Le protocole OAuth (Open Authorization) est l'un des protocoles d'authentification et d'autorisation les plus couramment utilisés dans le développement Internet moderne. Cet article explique comment implémenter l'authentification OAuth à l'aide du framework Web Python Django et d'un package appelé django-allauth.

Django est un framework d'application Web gratuit et open source écrit en Python, qui aide les développeurs à créer rapidement des applications Web de haute qualité. django-allauth est un package Django qui fournit aux développeurs des fonctionnalités telles que l'authentification sociale, OAuth, OpenID et l'authentification par courrier électronique.

Tout d'abord, nous devons installer Django et Django-allauth. Vous pouvez utiliser l'outil pip pour installer, la commande est la suivante :

pip install django
pip install django-allauth

Une fois l'installation terminée, nous devons ajouter les informations de configuration django-allauth au fichier settings.py de l'application Django. Ajoutez ce qui suit au bas du fichier :

INSTALLED_APPS = [
    # ...
    'django.contrib.sites',
    'allauth',
    'allauth.account',
    'allauth.socialaccount',
    'allauth.socialaccount.providers.google',
    # ...
]

AUTHENTICATION_BACKENDS = [
    'django.contrib.auth.backends.ModelBackend',
    'allauth.account.auth_backends.AuthenticationBackend',
]

SITE_ID = 1
LOGIN_REDIRECT_URL = '/'
ACCOUNT_EMAIL_VERIFICATION = 'none'
SOCIALACCOUNT_QUERY_EMAIL = True
SOCIALACCOUNT_PROVIDERS = {
    'google': {
        'SCOPE': ['profile', 'email'],
        'AUTH_PARAMS': {'access_type': 'online'},
    },
}

Dans la configuration ci-dessus, nous avons activé tous les plugins d'authentification et plugins sociaux pour Django et défini Google comme notre fournisseur OAuth.

Ajouter l'authentification OAuth à la vue :
Maintenant, nous devons ajouter la fonctionnalité d'authentification OAuth à la vue. Créez une vue appelée "login" et ajoutez-y le code suivant :

from allauth.socialaccount.models import SocialAccount
from django.contrib.auth import login
from django.contrib.auth.decorators import login_required
from django.shortcuts import redirect, render

@login_required
def login(request):
    social_account = SocialAccount.objects.filter(user=request.user).first()

    if social_account:
        return redirect('/')
        
    social_login = request.session.get('sociallogin')
    
    if social_login:
        if social_login.account.provider == 'google':
            social_account = SocialAccount(
                user=request.user, 
                provider=social_login.account.provider, 
                uid=social_login.account.uid, 
                extra_data=social_login.account.extra_data, 
            )
            social_account.save()
            return redirect('/')
            
    context = {
        'google_login_url': '/accounts/google/login/',
    }
    
    return render(request, 'login.html', context)

Dans le code de cette vue, il vérifie d'abord si l'utilisateur est associé à un compte social, et si c'est le cas, il redirige directement vers la page d'accueil. Si l'utilisateur n'est pas associé à un compte social, vérifiez si la session de l'utilisateur est associée à des informations OAuth.

Si tel est le cas, nous vérifions si les informations OAuth appartiennent à un compte Google et les enregistrons en tant qu'objet SocialAccount. S'il n'y a pas de liaison, nous renvoyons un dictionnaire contenant l'URL de connexion Google et un modèle.

Enfin, nous devons ajouter une URL au modèle login.html sur lequel les utilisateurs peuvent cliquer pour démarrer l'authentification OAuth. Une variable appelée "google_login_url" est utilisée ici, nous la plaçons donc dans le contexte du modèle. Le code du modèle est le suivant :

{% extends 'base.html' %}

{% block content %}
    <h1>Login</h1>
    <p>Please login with your Google account.</p>
    <a href="{{ google_login_url }}">Google Login</a>
{% endblock %}

Enfin, nous devons ajouter le modèle d'URL d'authentification OAuth au fichier urls.py du projet. Ajoutez ce qui suit au bas du fichier :

from django.urls import include, path
from django.contrib import admin

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('allauth.urls')),
    path('', login, name='login'),
]

Notre fonctionnalité d'authentification OAuth est désormais terminée. Nous pouvons exécuter le serveur Django et accéder à la vue dans le navigateur. Cela passera à la page d'authentification OAuth de Google pour demander l'autorisation de l'utilisateur.

Après l'autorisation de l'utilisateur, il reviendra à notre application Django et redirigera vers la page d'accueil. Dans notre base de données, il y aura désormais un nouvel enregistrement SocialAccount contenant des informations OAuth sur cet utilisateur.

À travers cet article, nous vous présentons comment implémenter l'authentification OAuth dans les applications Django. L'utilisation de Django-allauth est très simple et ne nécessite qu'une petite configuration pour effectuer l'authentification. Nous espérons que cet article sera très utile aux personnes qui cherchent à utiliser OAuth pour l'authentification et l'autorisation.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn