Django-Allauth
Django 內建的驗證系統(見 使用者驗證)只處理「帳號+密碼」登入。如果想讓使用者用 Google、GitHub、Facebook 等第三方帳號直接登入(社群登入 / Social Login),或需要更完整的 Email 驗證、雙因素驗證流程,最常用的第三方套件是 django-allauth。
官方文件:django-allauth documentation。
安裝與基本設定
INSTALLED_APPS 需要加上 allauth 相關的 App,以及要支援的社群登入提供者(provider):
# settings.py
INSTALLED_APPS = [
...
"django.contrib.sites", # allauth 依賴 sites framework
"allauth",
"allauth.account",
"allauth.socialaccount",
"allauth.socialaccount.providers.google", # 依需求增減提供者
]
SITE_ID = 1
AUTHENTICATION_BACKENDS = [
"django.contrib.auth.backends.ModelBackend",
"allauth.account.auth_backends.AuthenticationBackend",
]
再把 allauth 的網址掛進 Project 的 urls.py:
設定社群登入提供者
每個社群登入提供者(Google、GitHub…)都要先到該平台的開發者後台申請 OAuth 用戶端 ID 與密鑰,再到 Django Admin 的「Social applications」新增一筆設定,把用戶端 ID/密鑰、以及要套用的網站(Site)對應起來。詳細的各家提供者設定步驟,請以 官方文件的 Providers 章節 為準,不同提供者的申請流程與所需權限(scope)略有差異。
這個套件還能做什麼
除了社群登入,django-allauth 也整合了:
- Email 驗證(註冊後寄送驗證信)。
- 密碼重設、變更等流程的現成 View 與 Template。
- 雙因素驗證(Two-Factor Authentication)。
- 用 REST API 存取驗證流程的「headless」模式,適合前後端分離或行動 App。
適合直接沿用 django-allauth 的完整流程,取代 使用者驗證 一頁介紹的內建 django.contrib.auth.urls;兩者也可以並存,依需求選擇要用哪一套登入頁面。
下一步
驗證系統完成後,記得替重要功能寫測試,確保登入、權限判斷等邏輯不會在日後修改時悄悄壞掉,請見 測試。