Leer hoe u met OAuth een veilig inlogsysteem kunt maken met sociale media-accounts in Django.

Sociale authenticatie is een manier om de identiteit van een persoon te bevestigen via een sociaal account in plaats van het gebruik van wachtwoorden. Bij webontwikkeling is het altijd handig om gebruikers zonder wachtwoord te authenticeren. Zo kunnen ze inloggen via sociale apps als Google, Twitter of GitHub.

Het inschakelen van sociale authenticatie is een geweldige manier om de beveiliging van uw applicatie te verbeteren door het risico op veelvoorkomende wachtwoordgerelateerde kwetsbaarheden te verminderen. Het verbetert ook de gebruikerservaring van uw app, omdat gebruikers niet veel wachtwoorden hoeven te onthouden.

Gebruikersauthenticatie in Django

Django biedt een standaard authenticatiesysteem waarmee ontwikkelaars kunnen werken. Dit authenticatiesysteem maakt echter gebruik van traditionele authenticatie, waarbij handmatig gegevens worden verzameld, zoals de gebruikersnaam, het e-mailadres, het wachtwoord, de voornaam en de achternaam van de gebruiker.

Het authenticatiesysteem van Django is van nature erg algemeen en biedt niet veel functies die tegenwoordig in de meeste webauthenticatiesystemen worden gebruikt. Om dit aan te vullen, wilt u pakketten van derden gebruiken, zoals de django-allauth pakket.

Hoe OAuth in Django in te schakelen

Om uw gebruikers te authenticeren met OAuth in een Django-applicatie, kunt u een Django-pakket gebruiken met de naam django-allauth.

Django Allauth is een pakket dat de authenticatie, registratie, accountbeheer en (sociale) accountauthenticatie van derden voor uw Django-project afhandelt. De volgende stappen begeleiden u bij het opzetten van Django Allauth voor uw Django-project.

Stap 1: Installeer en configureer Django-Allauth

Als u dit nog moet doen, creëer een virtuele omgeving en installeren django-allauth via pip:

pip install django-allauth

Houd er rekening mee dat u Python 3.5 of hoger en Django 2.0 of hoger moet gebruiken om te kunnen werken.

Stap 2: Voeg de vereiste apps toe aan Django voor Django-Allauth

Na het installeren django-allauth, open je instellingen.py bestand en voeg de volgende apps toe aan uw GEÏNSTALLEERDE_APPS lijst:

INSTALLED_APPS = [


Add your other apps here

# Djang Allauth configuration apps
'django.contrib.sites',
'allauth',
'allauth.account',
'allauth.socialaccount',
]

Hier volgen enkele aandachtspunten bij enkele van de bovenstaande apps:

  • De allauth.socialaccount app laat gebruikers inloggen via sociale apps zoals X (voorheen Twitter), Instagram, GitHub en anderen.
  • De django.contrib.sites app is een ingebouwd Django-framework dat vereist is voor django-allauth werken. De app biedt de mogelijkheid om meerdere sites binnen één Django-project te beheren en te differentiëren. U kunt begrijpen hoe het werkt door te verwijzen naar de Django-documentatie.

Stap 3: Definieer de authenticatie-backends voor uw project

De volgende stap is het definiëren hoe u uw gebruikers wilt authenticeren. U kunt dit doen door het configureren van de AUTHENTICATIE_BACKENDS in uw instellingen.py bestand. Voor django-allauth, moet je deze toevoegen:

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

Het bovenstaande codefragment definieert twee authenticatie-backends:

  1. De eerste is de standaard die door Django wordt gebruikt. Hierdoor kan de admin-gebruiker inloggen op het admin-paneel, ongeacht de configuratie van django-allauth.
  2. De tweede definieert de authenticatie-backend voor django-allauth.

Stap 4: Voeg uw site-ID toe

In uw instellingenbestand moet u de ID voor uw site toevoegen. Hier is een voorbeeld:

SITE_ID = 1

Standaard is er een site genaamd voorbeeld.com in het beheerderspaneel. U kunt besluiten deze site aan te passen of er zelf een toe te voegen. In beide gevallen moet u inloggen op het beheerdersdashboard en naar het Sites app.

Om de site-ID voor een Django-site te krijgen, opent u uw Commandoregelinterface (CLI) en voer deze opdracht uit:

python manage.py shell

Schrijf vervolgens dit script in de Python-shell:

from django.contrib.sites.models import Site

current_site = Site.objects.get_current()
site_id = current_site.id
site_name = current_site.name
print("Site ID:", site_id)
print("Site Name:", site_name)

De bovenstaande code drukt de naam van de site af, evenals de ID ervan.

Stap 5: Configureer uw URL's

In uw project URL's.py bestand, configureer het URL-patroon voor django-allauth. Zo zou het eruit moeten zien:

from django.urls import path, include

urlpatterns = [
# Djang-allauth url pattern
path('accounts/', include('allauth.urls')),
]

Met deze configuratie kunt u uw ontwikkelserver starten en naar navigeren http://127.0.0.1:8000/accounts/. Als je hebt DEBUGGEN ingesteld op WAAR, zou u een lijst met beschikbare URL-patronen voor moeten zien django-allauth.

Als u het bovenstaande heeft gedaan, zou uw project klaar moeten zijn voor sociale authenticatie.

Hoe u Google Login / Signup implementeert in uw Django-app

Na het instellen django-allauth, moet u er klaar voor zijn om uw gebruikers zichzelf te laten authenticeren met hun sociale accounts zoals Google.

Stap 1: Registreer uw sociale accountprovider in uw geïnstalleerde apps

In uw instellingen.py bestand, moet u de aanbieder van het sociale account toevoegen GEÏNSTALLEERDE_APPS. In dit geval is dat Google. Andere opties zijn Instagram, X, etc.

INSTALLED_APPS = [


Add your other apps here

# Social account provider (google)
'allauth.socialaccount.providers.google',
]

Stap 2: Maak uw klant-ID en geheime sleutel aan op Google

Om deze stap te voltooien, moet u een Google-account hebben aangemaakt. Als u dit heeft gedaan, volgt u de volgende stappen:

  1. Ga naar de Google Cloud-console om een ​​nieuw project aan te maken. Klik eerst op het vervolgkeuzemenu dat in de onderstaande afbeelding wordt weergegeven:
  2. Klik vervolgens op NIEUW PROJECT:
  3. Voer een naam in voor uw project en klik vervolgens op de CREËREN knop:
  4. Met uw project geselecteerd, klikt u op het hamburgermenu. Selecteer API's en services, Dan Referenties:
  5. Klik vervolgens op de optie die zegt CONFIGUREER TOESTEMMINGSSCHERM en selecteer Extern:
  6. Voer op de volgende pagina een naam in voor uw app en voeg indien nodig een e-mailadres toe. U kunt ook de configuraties verkennen voor wat maatwerk. Als u klaar bent, klikt u op OPSLAAN EN DOORGAAN.
  7. Selecteer in het linkermenu Referenties. Klik daarna op CREDENTIALS MAKEN en selecteer OAuth-client-ID.
  8. Selecteer vervolgens de Applicatie type en voer hiervoor een naam in. Voor deze zelfstudie is de Applicatie type zal zijn web applicatie.
  9. Voeg vervolgens URI's toe voor de Geautoriseerde JavaScript-oorsprong En Geautoriseerde omleidings-URI's. De host van uw website moet de JavaScript-oorsprong zijn en het systeem zal gebruikers na authenticatie omleiden naar de omleidings-URI. De omleidings-URI moet normaal gesproken bevatten uw-hostnaam/accounts/google/login/callback/. Voor de ontwikkelingsmodus is dit: http://127.0.0.1:8000/accounts/google/login/callback/. Klik op CREËREN als het eenmaal gedaan is.
  10. Nadat u de inloggegevens heeft aangemaakt, kunt u uw klant identificatie of Klantgeheim naar een veilige plaats of download ze als JSON-bestanden.

Stap 3: Voeg uw klant-ID en geheime sleutel toe aan uw Django-app

Nadat u de benodigde inloggegevens heeft aangemaakt, navigeert u naar http://127.0.0.1:8000/admin, selecteer Sociale toepassingenen maak een nieuwe sociale applicatie. Volg deze stappen om een ​​nieuwe sociale app te maken:

  1. Voeg een aanbieder toe. De provider verwijst naar de app waarmee u uw gebruiker authenticeert. In dit geval is dat Google, in een ander geval zou het Snapchat kunnen zijn.
  2. Voer een naam in voor uw nieuwe sociale app. Zorg ervoor dat het een redelijke naam is
  3. Plak in de klant identificatie je hebt gekopieerd van Google.
  4. Voor de Geheime sleutel, plak in de Klantgeheim je hebt gekopieerd van Google.
  5. De Sleutel veld is niet van toepassing op authenticatie met Google, dus negeer het.
  6. Selecteer ten slotte een site waaraan u de sociale applicatie wilt koppelen.

Stap 4: Test uw Google-authenticatie

Meld u af bij uw beheerderspaneel en navigeer naar http://127.0.0.1:8000/accounts/login/. Je ziet een optie om in te loggen via Google.

Klik erop om door te gaan naar het toestemmingsscherm. Selecteer vervolgens een account waarmee u wilt inloggen.

Zodra u een account heeft geselecteerd, wordt u doorgestuurd naar http://127.0.0.1:8000/accounts/profile/. Dit betekent dat uw app perfect werkt. U kunt aangepaste sjablonen maken om de standaardsjablonen te vervangen.

Verbetering van gebruikersregistratie met sociale authenticatie in Django

Het inschakelen van sociale authenticatie is een geweldige manier om uw gebruikers een geweldige ervaring te bieden bij het registreren voor uw toepassing. Er zijn andere manieren om authenticatie in Django in te schakelen, en u moet deze verkennen om te beslissen wat het beste is voor uw gebruiksscenario.