首頁  >  文章  >  後端開發  >  Python伺服器程式設計:使用django-allauth實現OAuth認證

Python伺服器程式設計:使用django-allauth實現OAuth認證

王林
王林原創
2023-06-18 11:27:071438瀏覽

在現代網路應用程式中,使用者認證和授權是非常重要的因素。而OAuth(開放授權)協定則是現代網路開發中最常用的認證和授權協定之一。本文將介紹使用Python的Web框架Django和一個名為django-allauth的套件來實現OAuth認證的方法。

Django是一個使用Python編寫的免費開源的網路應用程式框架,它可以幫助開發人員快速建立高品質的網路應用程式。 django-allauth是一個Django包,它為開發人員提供了社交認證、OAuth、OpenID和E-mail驗證等功能。

首先,我們需要安裝Django和django-allauth。可以使用pip工具進行安裝,命令如下:

pip install django
pip install django-allauth

安裝完成後,我們需要在Django應用程式的settings.py檔案中加入django-allauth設定資訊。在文件底部添加以下內容:

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

上述配置中,我們啟用了Django的所有auth插件和社交插件,並將Google設定為我們的OAuth提供者。

在檢視中新增OAuth認證:
現在,我們需要在檢視中新增OAuth認證功能。建立一個名為「login」 的視圖,在其中加入以下程式碼:

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)

這個視圖的程式碼中,首先檢查用戶是否有與其關聯的社交帳戶,如果是則直接重定向到主頁。如果使用者未關聯社交帳戶,則檢查使用者的會話是否有與其綁定的OAuth資訊。

如果有,我們檢查OAuth資訊是否屬於Google帳戶,並將它儲存為一個SocialAccount物件。如果沒有綁定,我們回傳一個包含Google登入URL和一個模板的字典。

最後,我們需要在模板login.html中新增一個URL,讓使用者點擊以開始OAuth認證。這裡使用了一個名為“google_login_url”的變量,所以我們將其放置在模板上下文中。範本程式碼如下:

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

最後,我們需要在專案的urls.py檔案中新增OAuth認證的URL模式。在文件底部新增以下內容:

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

現在我們的OAuth認證功能已經完成。我們可以運行Django伺服器並在瀏覽器中存取該視圖。這將跳到Google的OAuth認證頁面,請求使用者授權。

在使用者授權後,會回到我們的Django應用程式並重定向到主頁。在我們的資料庫中,現在會有一條新的SocialAccount記錄,其中包含有關該使用者的OAuth資訊。

透過本文,我們向大家介紹如何在Django應用程式中實現OAuth認證。使用django-allauth非常簡單,只需要進行少量的設定就可以執行auth。我們希望這篇文章對正在研究如何使用OAuth進行身份驗證和授權的人非常有幫助。

以上是Python伺服器程式設計:使用django-allauth實現OAuth認證的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn