Rumah >pembangunan bahagian belakang >Tutorial Python >Pengaturcaraan pelayan Python: menggunakan django-allauth untuk melaksanakan pengesahan OAuth

Pengaturcaraan pelayan Python: menggunakan django-allauth untuk melaksanakan pengesahan OAuth

王林
王林asal
2023-06-18 11:27:071454semak imbas

Pengesahan dan kebenaran pengguna adalah faktor yang sangat penting dalam aplikasi Internet moden. Protokol OAuth (Open Authorization) ialah salah satu protokol pengesahan dan kebenaran yang paling biasa digunakan dalam pembangunan Internet moden. Artikel ini akan memperkenalkan cara untuk melaksanakan pengesahan OAuth menggunakan rangka kerja web Python Django dan pakej yang dipanggil django-allauth.

Django ialah rangka kerja aplikasi web sumber terbuka dan percuma yang ditulis dalam Python, yang boleh membantu pembangun membina aplikasi web berkualiti tinggi dengan cepat. django-allauth ialah pakej Django yang menyediakan pembangun dengan ciri seperti pengesahan sosial, OAuth, OpenID dan pengesahan e-mel.

Pertama, kita perlu memasang Django dan django-allauth. Anda boleh menggunakan alat pip untuk memasang, arahannya adalah seperti berikut:

pip install django
pip install django-allauth

Selepas pemasangan selesai, kami perlu menambah maklumat konfigurasi django-allauth pada fail settings.py aplikasi Django. Tambahkan yang berikut di bahagian bawah fail:

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

Dalam konfigurasi di atas, kami telah mendayakan semua pemalam auth dan pemalam sosial untuk Django dan menetapkan Google sebagai pembekal OAuth kami.

Tambahkan pengesahan OAuth pada paparan:
Sekarang, kita perlu menambah fungsi pengesahan OAuth pada paparan. Cipta paparan yang dipanggil "log masuk" dan tambahkan kod berikut di dalamnya:

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)

Dalam kod paparan ini, ia mula-mula menyemak sama ada pengguna mempunyai akaun sosial yang dikaitkan dengannya dan jika ya ia mengubah hala terus ke laman utama. Jika pengguna tidak dikaitkan dengan akaun sosial, semak sama ada sesi pengguna mempunyai maklumat OAuth yang terikat padanya.

Jika ya, kami menyemak sama ada maklumat OAuth milik akaun Google dan menyimpannya sebagai objek SocialAccount. Jika tiada pengikatan, kami mengembalikan kamus yang mengandungi URL log masuk Google dan templat.

Akhir sekali, kami perlu menambah URL pada login.html templat untuk pengguna mengklik untuk memulakan pengesahan OAuth. Pembolehubah yang dipanggil "google_login_url" digunakan di sini, jadi kami meletakkannya dalam konteks templat. Kod templat adalah seperti berikut:

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

Akhir sekali, kami perlu menambah corak URL pengesahan OAuth pada fail urls.py projek. Tambahkan yang berikut di bahagian bawah fail:

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

Kini fungsi pengesahan OAuth kami telah lengkap. Kami boleh menjalankan pelayan Django dan mengakses paparan dalam penyemak imbas. Ini akan melompat ke halaman pengesahan OAuth Google untuk meminta kebenaran pengguna.

Selepas pengguna memberi kebenaran, ia akan kembali ke aplikasi Django kami dan mengubah hala ke halaman utama. Dalam pangkalan data kami, kini akan terdapat rekod SocialAccount baharu yang mengandungi maklumat OAuth tentang pengguna ini.

Melalui artikel ini, kami memperkenalkan kepada anda cara melaksanakan pengesahan OAuth dalam aplikasi Django. Menggunakan django-allauth adalah sangat mudah dan hanya memerlukan sedikit persediaan untuk melaksanakan pengesahan. Kami berharap artikel ini sangat membantu orang yang mencari cara menggunakan OAuth untuk pengesahan dan kebenaran.

Atas ialah kandungan terperinci Pengaturcaraan pelayan Python: menggunakan django-allauth untuk melaksanakan pengesahan OAuth. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn