Heim  >  Artikel  >  Backend-Entwicklung  >  Python-Serverprogrammierung: Verwendung von Django-Allauth zur Implementierung der OAuth-Authentifizierung

Python-Serverprogrammierung: Verwendung von Django-Allauth zur Implementierung der OAuth-Authentifizierung

王林
王林Original
2023-06-18 11:27:071382Durchsuche

Benutzerauthentifizierung und -autorisierung sind sehr wichtige Faktoren in modernen Internetanwendungen. Das OAuth-Protokoll (Open Authorization) ist eines der am häufigsten verwendeten Authentifizierungs- und Autorisierungsprotokolle in der modernen Internetentwicklung. In diesem Artikel wird erläutert, wie Sie die OAuth-Authentifizierung mithilfe des Python-Webframeworks Django und eines Pakets namens django-allauth implementieren.

Django ist ein kostenloses und in Python geschriebenes Open-Source-Webanwendungs-Framework, das Entwicklern hilft, schnell hochwertige Webanwendungen zu erstellen. django-allauth ist ein Django-Paket, das Entwicklern Funktionen wie soziale Authentifizierung, OAuth, OpenID und E-Mail-Authentifizierung bietet.

Zuerst müssen wir Django und django-allauth installieren. Sie können zum Installieren das Pip-Tool verwenden. Der Befehl lautet wie folgt:

pip install django
pip install django-allauth

Nach Abschluss der Installation müssen wir die Django-Allauth-Konfigurationsinformationen zur Datei „settings.py“ der Django-Anwendung hinzufügen. Fügen Sie am Ende der Datei Folgendes hinzu:

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'},
    },
}

In der obigen Konfiguration haben wir alle Authentifizierungs-Plugins und Social-Plugins für Django aktiviert und Google als unseren OAuth-Anbieter festgelegt.

OAuth-Authentifizierung zur Ansicht hinzufügen:
Jetzt müssen wir der Ansicht die OAuth-Authentifizierungsfunktion hinzufügen. Erstellen Sie eine Ansicht mit dem Namen „login“ und fügen Sie darin den folgenden Code hinzu:

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)

Im Code dieser Ansicht wird zunächst geprüft, ob mit dem Benutzer ein soziales Konto verknüpft ist, und wenn ja, wird er direkt zur Startseite weitergeleitet. Wenn der Benutzer keinem sozialen Konto zugeordnet ist, prüfen Sie, ob an die Sitzung des Benutzers OAuth-Informationen gebunden sind.

Wenn ja, prüfen wir, ob die OAuth-Informationen zu einem Google-Konto gehören und speichern sie als SocialAccount-Objekt. Wenn keine Bindung vorliegt, geben wir ein Wörterbuch zurück, das die Google-Anmelde-URL und eine Vorlage enthält.

Schließlich müssen wir der Vorlage login.html eine URL hinzufügen, damit Benutzer darauf klicken können, um die OAuth-Authentifizierung zu starten. Hier wird eine Variable namens „google_login_url“ verwendet, daher platzieren wir sie im Vorlagenkontext. Der Vorlagencode lautet wie folgt:

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

Zuletzt müssen wir das OAuth-Authentifizierungs-URL-Muster zur Datei urls.py des Projekts hinzufügen. Fügen Sie am Ende der Datei Folgendes hinzu:

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

Jetzt ist unsere OAuth-Authentifizierungsfunktionalität abgeschlossen. Wir können den Django-Server ausführen und auf die Ansicht im Browser zugreifen. Dadurch wird zur OAuth-Authentifizierungsseite von Google weitergeleitet, um eine Benutzerautorisierung anzufordern.

Nachdem der Benutzer die Autorisierung vorgenommen hat, kehrt er zu unserer Django-Anwendung zurück und leitet zur Startseite weiter. In unserer Datenbank gibt es nun einen neuen SocialAccount-Datensatz, der OAuth-Informationen zu diesem Benutzer enthält.

In diesem Artikel stellen wir Ihnen vor, wie Sie die OAuth-Authentifizierung in Django-Anwendungen implementieren. Die Verwendung von django-allauth ist sehr einfach und erfordert nur einen geringen Einrichtungsaufwand für die Authentifizierung. Wir hoffen, dass dieser Artikel für Menschen, die sich mit der Verwendung von OAuth zur Authentifizierung und Autorisierung befassen möchten, sehr hilfreich ist.

Das obige ist der detaillierte Inhalt vonPython-Serverprogrammierung: Verwendung von Django-Allauth zur Implementierung der OAuth-Authentifizierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn