django-allauth的安裝和配置
文章轉載於:https://mp.weixin.qq.com/s/IWOqbp5ZUuLPkMt25ylgPQ
django-allauth是最受歡迎的管理使用者登入與註冊的第三方Django安裝包。django-allauth支援本地和第三方賬號(Github,百度、微博、微信等等。。),集成了郵箱驗證、密碼修改、本地賬號關聯(多個)第三方賬號等各種功能。
安裝
pip install django-allauth
settings.py中的配置
INSTALLED_APPS = [# 必須安裝的app
'django.contrib.auth',
'django.contrib.sites', 'allauth',
'allauth.account',
'allauth.socialaccount',
# 下面是第三方賬號相關的,比如github
'allauth.socialaccount.providers.github',
]
# django-allauth相關設定
AUTHENTICATION_BACKENDS = (
# django admin所使用的使用者登入與django-allauth無關
'django.contrib.auth.backends.ModelBackend',
# `allauth` specific authentication methods, such as login by e-mail
'allauth.account.auth_backends.AuthenticationBackend',
)
# 前面我們app裡添加了django.contrib.sites,需要設定
SITE_IDSITE_ID = 1
ACCOUNT_AUTHENTICATION_METHOD = 'username_email' # 當用戶登入時,既可以使用使用者名稱也可以使用email
ACCOUNT_EMAIL_REQUIRED = True # 註冊時必須填寫email
LOGIN_REDIRECT_URL = '/accounts/個人中心' # 設定登入後跳轉連結
# django-allauth相關設定
AUTHENTICATION_BACKENDS = (
# django admin使用的使用者登入於django-allauth無關
'django.contrib.auth.backends.ModelBackend',
'allauth.account.auth_backends.AuthenticationBackend',
)
# django的郵箱設定,使用allauth的話,註冊後它會給郵箱傳送一條註冊資訊給註冊郵箱驗證
EMAIL_HOST = 'smtp.qq.com' # 這裡使用QQ的smtp服務
EMAIL_PORT = 25
EMAIL_HOST_USER = '280**** [email protected]' # 你的 QQ 賬號和授權碼
EMAIL_HOST_PASSWORD = 'vdltztnwuggbddei'
EMAIL_USE_TLS = True # 這裡必須是 True,否則傳送不成功
EMAIL_FROM = '280****[email protected]' # 發件人郵箱
DEFAULT_FROM_EMAIL = '280****[email protected]' # 預設發件人郵箱
在根urls.py中新增django-allauth的路徑
urlpatterns = [ path('admin/', admin.site.urls), path('accounts/', include('allauth.urls')), ]
django-allauth常見設定選項
你也可以新增其它設定選項來實現你所想要的功能, 比如設定郵件確認過期時間,限制使用者使用錯誤密碼登入的持續時間。
-
ACCOUNT_AUTHENTICATION_METHOD (="username" | "email" | "username_email"):指定要使用的登入方法(使用者名稱、電子郵件地址或兩者之一)
-
ACCOUNT_EMAIL_CONFIRMATION_EXPIRE_DAYS (=3):郵件確認郵件的截止日期(天數)
-
ACCOUNT_EMAIL_VERIFICATION (="optional"):註冊中郵件驗證方法:“強制(mandatory)”,“可選(optional)”或“否(none)”之一
-
ACCOUNT_EMAIL_CONFIRMATION_COOLDOWN (=180):郵件傳送後的冷卻時間(以秒為單位)
-
ACCOUNT_LOGIN_ATTEMPTS_LIMIT (=5):登入嘗試失敗的次數
-
ACCOUNT_LOGIN_ATTEMPTS_TIMEOUT (=300):從上次失敗的登入嘗試,使用者被禁止嘗試登入的持續時間
-
ACCOUNT_LOGIN_ON_EMAIL_CONFIRMATION (=False):更改為True,使用者一旦確認他們的電子郵件地址,就會自動登入
-
ACCOUNT_LOGOUT_ON_PASSWORD_CHANGE (=False):更改或設定密碼後是否自動退出
-
ACCOUNT_LOGIN_ON_PASSWORD_RESET (=False):更改為True,使用者將在重置密碼後自動登入
-
ACCOUNT_SESSION_REMEMBER (=None):控制會話的生命週期,可選項還有:False,True
-
ACCOUNT_SIGNUP_EMAIL_ENTER_TWICE (=False):使用者註冊時是否需要輸入郵箱兩遍
-
ACCOUNT_SIGNUP_PASSWORD_ENTER_TWICE (=True): 使用者註冊時是否需要使用者輸入兩遍密碼
-
ACCOUNT_USERNAME_BLACKLIST (=[]):使用者不能使用的使用者名稱列表
-
ACCOUNT_UNIQUE_EMAIL (=True): 加強電子郵件地址的唯一性
-
ACCOUNT_USERNAME_MIN_LENGTH (=1):使用者名稱允許的最小長度的整數
-
SOCIALACCOUNT_AUTO_SIGNUP (=True):使用從社會帳戶提供者檢索的欄位(如使用者名稱、郵件)來繞過登錄檔單
-
LOGIN_REDIRECT_URL (="/") 設定登入後跳轉連結
-
ACCOUNT_LOGOUT_REDIRECT_URL (="/") 設定退出登入後跳轉連結
以上基本設定後,需要同步資料庫
python manage.py makemigrations
python manage.py migrate
python manage.py runserver
登入admin後,設定好site域名127.0.0.1:8000和名字,再退出登入。就可以訪問以下連結檢視allauth的效果了。由於我們已經設定好了郵箱,所以涉及郵箱驗證和密碼重置部分都可以正常進行的。
當你註冊成功後,你會收到一份郵件驗證你的郵箱。在你提交表單後,django-allauth會自動檢測使用者名稱和email是否已存在
點選郵件中的連結,點選確認就可以驗證郵箱了。如果你不需要郵箱驗證,你只需要設定ACCOUNT_EMAIL_VERIFICATION (="nonel")就可以了。
django-allauth的URLs及檢視
下面是django_allauth所有內建的URLs,均可以訪問的。
-
/accounts/login/(URL名account_login): 登入
-
/accounts/signup/ (URL名account_signup): 註冊
-
/accounts/password/reset/(URL名: account_reset_password) :重置密碼
-
/accounts/logout/ (URL名account_logout): 退出登入
-
/accounts/password/set/ (URL名:account_set_password): 設定密碼
-
/accounts/password/change/ (URL名: account_change_password): 改變密碼(需登入)
-
/accounts/email/(URL名: account_email) 使用者可以新增和移除email,並驗證
-
/accounts/social/connections/(URL名:socialaccount_connections): 管理第三方賬戶
url中有一個為 /accounts/profile/的路徑,這個是我們登入後會跳轉的連結,由於每個人的需求不一樣,所有django-allauth沒有提供這個檢視。