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

王林
Lepaskan: 2023-06-18 11:27:07
asal
1433 orang telah melayarinya

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
Salin selepas log masuk

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'},
    },
}
Salin selepas log masuk

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)
Salin selepas log masuk

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 %}
Salin selepas log masuk

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'),
]
Salin selepas log masuk

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!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!