身分認證——Session 認證與全域設定
這是 Django Ninja 系列教學的第 28 篇。
歡迎來到第七章!本章總共有兩篇內容:
- 卷 28:身分認證——Session 認證與全域設定
- 卷 29:單元測試——使用 Test Client 與 pytest 測試 API
這些主題的核心功能,並非由 Django Ninja 實作,但框架仍提供了一定程度的整合。並且,這些功能對於任何 Django 專案來說,都至關重要。
本文介紹幾乎所有 API 專案都需要的——身分認證(Authentication)。
我們將探討如何在 Django Ninja 中利用 Django 內建的 session-based 認證,實現完整的登入驗證功能,並進一步說明如何設定全域認證,以減少程式碼的重複。
本文所有的程式碼改動,可參考這個 PR。
快速導覽
👉 完整系列目錄:點此查看
👉 程式碼範例:GitHub 範例專案
認證的兩個層次
進入實作前,我們要先了解,所謂的身分認證,究竟代表什麼。
以「帳號密碼 + session 認證」為例,身分認證的範圍主要涵蓋兩個階段。
首先,當使用者透過帳號密碼進行登入時,系統會檢查這些內容、確認身分合法。登入成功後,系統會將使用者資訊(比如用戶 id)儲存至 session,以維持登入狀態。
這是登入時的認證,也是我們最常說的認證。(狹義的認證)
接著,當使用者嘗試存取受「認證保護」的 API 時,系統會檢查 session 並確認身分,確保每個 API 請求都來自合法登入的使用者。
簡言之:
- 第一階段:初次登入時的身分確認。
- 第二階段:後續請求時的身分確認。
兩個層次相輔相成、一體兩面,確保服務能夠在使用者登入和後續操作中,提供適當的安全保障。