如何在Django網站中新增身份驗證?


在Web應用程式中,資料管理有兩個關鍵要素。首先是從多個瀏覽器查詢中儲存獲取的資料;其次是使用這些儲存的資料來驗證使用者身份。會話允許我們跟蹤跨多個瀏覽器查詢的資料。等式的第二部分是使用這些會話登入使用者。

我們不能相信人們就是他們聲稱的那個人,所以我們必須在過程中驗證他們的身份。當然,Django包含執行這些和其他典型任務的工具。Django的使用者身份驗證系統管理使用者帳戶、組、許可權和基於cookie的使用者會話。身份驗證/授權(auth/auth)系統是用於描述此係統的術語。

名稱(auth/auth)表明處理使用者通常是一個兩步過程。

  • 針對使用者資料庫檢查使用者名稱和密碼,以驗證(身份驗證)此人就是他或她聲稱的那個人。

  • 驗證(授權)使用者是否有權執行特定操作,通常是透過將使用者的許可權與表進行比較。

Django的auth/auth系統包含許多部分。所有這些部分都如下所示。

  • 使用者 - 您的使用者是已註冊您網站的人。

  • 許可權 - 這些是二進位制(是/否)標記,指示使用者是否允許執行特定任務。

  • - 一種以通用方式將標籤和許可權應用於多個使用者的機制。

  • 訊息 - 使用者排隊和檢視系統訊息的簡單方法。

  • 個人資料 - 一種向用戶物件新增自定義欄位的方法。

Django身份驗證將身份驗證和授權組合到一個包中,稱為身份驗證系統,因為這些功能在某種程度上是相互關聯的。

身份驗證支援包含在django.contrib中,作為一個必須安裝的Django應用程式。它預設情況下已安裝,但如果您已解除安裝它,則需要使用以下步驟重新安裝它。

驗證會話框架是否已就位。當然,跟蹤使用者需要使用cookie,這就是使用會話框架的原因。

  • 將'django.contrib.auth'新增到您的INSTALLED_APPS配置後,執行manage.py syncdb。

  • 確保'django.contrib.auth.middleware.AuthenticationMiddleware'位於您的MIDDLEWARE_CLASSES設定中,位於SessionMiddleware之後。

驗證使用者

django.contrib.auth是一個提供身份驗證功能的Django contrib模組。

必要的設定預設包含在django-admin startproject生成的settings.py檔案中。

  • 您的INSTALLED_APPS設定中包含以下兩項:

  • 'django.contrib.auth'中包含身份驗證框架的核心和預設模型。

  • 'django.contrib.contenttypes'稱為Django內容型別系統,它允許您將許可權與您開發的模型關聯。

以及您的MIDDLEWARE配置中的以下專案:

  • SessionMiddleware是一個跨請求管理會話的中介軟體。

  • AuthenticationMiddleware使用會話將使用者與請求關聯。

在這些設定就位的情況下執行命令manage.py migrate將為auth相關模型提供相應的資料庫表,併為已安裝應用程式中配置的任何模型提供許可權。

Authenticate() 方法

我們可以使用authenticate()方法來驗證一組憑據。它接收使用者名稱和密碼,並針對每個憑據進行身份驗證檢查。如果提供的憑據對後端有效,則返回使用者物件。如果不是,則引發PermissionDenied錯誤,並返回None。

from django.contrib.auth import authenticate
user=authenticate(username=’john’,password=’passwordjohn’)
if user is not None:
   #backend has authenticated the given data
else:
   #no backend has authenticated the given data

上面提供的方法是一種低階身份驗證方法。

下面可以看到登入期間使用者輸入資料身份驗證的示例。

def login(request):
   if request.method == 'POST':
      name = request.POST['name']
      password = request.POST['password']

      user = auth.authenticate(username=name,password=password)
      if user is not None:
         auth.login(request,user)
         messages.info(request,'You Have Successfully LogedIn')
         return redirect('/')
      else:
         messages.info(request,'Invalid Details')
         return redirect('login')
   else:
      return render(request, 'login.html')

透過這種方式,可以對使用者輸入的資料執行身份驗證。

更新於:2022年9月5日

636 次瀏覽

啟動您的職業生涯

透過完成課程獲得認證

開始
廣告